//Its a question on replacement of duplicate characters
public class RemoveDuplicateChars {
static String testcase1 = "DPMD Jayawardene";
public static void main(String args[]){
RemoveDuplicateChars testInstance= new RemoveDuplicateChars();
String result = testInstance.remove(testcase1);
System.out.println(result);
}
//write your code here
public String remove(String str){
return str.replaceAll("(.)(?=.*\\1)", "");//how this replacement working
}
}
答案 0 :(得分:1)
从类的名称可以看出 - 它删除了在字符串中重复的字符。
击穿:
(.)
- 代表任何字符,括号用于分组,因此我们稍后可以使用\1
(?=)
- 预测
(?=.*\\1)
- 我们期待着
.*
消费任意数量的字符并查找我们的第一个字符\1
如果正则表达式是真实的,引用的字符将被替换为空字符串。
请参阅 Fiddle
答案 1 :(得分:1)
(.)
:匹配捕获组中的任何字符(基本上是名为\1
的变量)(?=
:零宽度正向前瞻(确保字符串的其余部分匹配)
.*
任意数量的字符后跟\\1
抓获的小组换句话说,它匹配后面也出现在字符串中的任何字符(即重复)。在Java中,这将是:
for(int i=0; i<str.length(); i++) {
char captured = str.charAt(i); // (.)
if (str.substring(i+1).matches(".*" + captured)) { // (?=.*\1)
// the char is a duplicate, replace it with ""
}
}