要检查key
是否至少包含一个字符串s
两次,并删除第二次出现的字符串,可以使用indexOf
两次,第二次调用从第一次出现后开始搜索:
最初的回答:
Use indexOf
twice to check if a string s
appears at least twice in key
, and remove the second occurrence by starting the second search after the first occurrence.
static String removeSecond(String key, String s) {
int idxFirst = key.indexOf(s);
if (idxFirst != -1) {
int idxSecond = key.indexOf(s, idxFirst + s.length());
if (idxSecond != -1) {
return key.substring(0, idxSecond) +
key.substring(idxSecond + s.length());
}
}
return key;
}
Test
System.out.println(removeSecond("mississippi", "ss"));
System.out.println(removeSecond("mississippi", "i"));
System.out.println(removeSecond("mississippi", "pp"));
更新
如果你想要删除所有的重复内容,即只保留第一次出现的内容,请继续查找。为了获得构建新字符串的最佳性能,请使用 StringBuilder
。
static String removeDuplicates(String key, String s) {
int idx = key.indexOf(s);
if (idx == -1)
return key;
StringBuilder buf = new StringBuilder();
int prev = 0;
for (int start = idx + s.length(); (idx = key.indexOf(s, start)) != -1; prev = start = idx + s.length())
buf.append(key.substring(prev, idx));
return (prev == 0 ? key : buf.append(key.substring(prev)).toString());
}
Test
System.out.println(removeDuplicates("mississippi", "ss"));
System.out.println(removeDuplicates("mississippi", "i"));
System.out.println(removeDuplicates("mississippi", "s"));
System.out.println(removeDuplicates("mississippi", "ab"));
"a|b|c|a|d|c"
这样的内容 - 您想要删除第二个a
还是也删除第二个c
?为了更容易理解您的要求,您可以提供一些示例吗? - ThomasLinkedHashSet
中并从中重建字符串。元素的顺序将被保留,任何重复的元素都将被忽略。 - Thomas