Java字符串去掉重复字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java字符串去掉重复字符相关的知识,希望对你有一定的参考价值。

例如:
3dd2tt3去掉之后为3d2t3
2ccct3ffffee去掉之后为2cct3fffee
准确点说,数字后多有重复的去掉一个重复的,其余的照样,非数字后的重复字符照样(ee->ee)
末尾的意思是ee应该为ee,箭头被换行了···
还有忘写了··
字符是任意字符,可以不考虑一些符号类的。有连续相同的数字字符
比如:05dd322pp--->05d32p

package problem;

public class Nonrepeat
public static String delRepeat(String str)
char[] arr = str.toCharArray();
StringBuffer target = new StringBuffer();
boolean blDigit = false;
char nextChar = 0;
for (char c : arr)
if (isDigit(c))
target.append(c);
blDigit = true;

else if (!blDigit)
target.append(c);
else if (nextChar == 0 && blDigit)
target.append(c);
nextChar = c;
else if (blDigit && c != nextChar)
target.append(c);
blDigit = false;
nextChar = 0;
else if (blDigit && c == nextChar)
blDigit = false;
nextChar = 0;


return target.toString();


private static boolean isDigit(char c)
if (c > '0' && c < '9')
return true;
return false;



public static void main(String[] args)
String s = "ss2ss15ddddsdf";
System.out.println(delRepeat(s));

参考技术A public class Demo

public static String delDuplication(String s)
Pattern p = Pattern.compile("\\d([a-zA-Z0-9])\\1+");
Matcher m = p.matcher(s);
Stack<Integer> stack = new Stack<Integer>();
int end = 1;
while(m.find(end-1))
end = m.end();
stack.add(m.start() + 1);

Integer index = 0;
while(!stack.isEmpty())
index=stack.pop();
s = s.substring(0, index)+s.substring(index + 1);

return s;

public static void main(String[] args)
String s = "2ccct3ffffee";
System.out.println(delDuplication(s));

参考技术B 先把这些字符串用一个变量保存,然后转换成tochararray数组进行循环可以有contains进行判断是否有相同字符,用嵌套循环,随即改变数组值 参考技术C 通过Map集合应该可以吧:把字符串的每个字符作为Map集合的Key,放入Map集合,然后再把Key重新组合成新的字符串,有兴趣可以试一下啊,看看是否是你想要的结果。

java正则去掉重复字符

转自http://xuejianxinokok.blog.163.com/blog/static/4043757720104145738383/ 

 

 public static void main(String[] args)
                 
             String str = "aaaaaaahdbkjsdnfkjsndjkfsdfsdf";
             str="学学 习习 好";
             str = str.replaceAll("(?s)(.)(?=.*\\\\1)", ""); 
             System.out.println(str); 
   
               (?s)(.)(?=.*\\1) 
               
              (?s) 开启单行模式 DOTALL 让. 号匹配任意字符 (.) 任意字符 并捕获在第一组 (?=.*\\1) 这是断言, 
               表示后面内容将是 任意个字符加上第一组所捕获的内容 
                
               这样子,如果这整个式子匹配到,表示,第一个捕获组内容在字符串中,至少出现两次,替换为 "" 空串. 
                
              进行 全局替换后, 整个字符串所出现的字符将不重复。 

以上是关于Java字符串去掉重复字符的主要内容,如果未能解决你的问题,请参考以下文章

java中去掉字符串数组中重复的字符串(不改变原有顺序)并计数(不同的字符串重复了多少次)

java中怎么将字符串数组中的重复的元素去掉,但是还是保留一个。

java正则去掉重复字符

java字符串中怎么去掉指定字符的前一个字符

java 可拆成数组的字符串,去掉重复元素的一种方法

java字符串里有两个重复字符我想删掉其中一个