我想在两个String中查找使它们不相等的字符并打印出来。
例如:
String str1 = "abcd";
String str2 = "abc";
输出=“ d”
我使用的代码如下所示:
public void removeUnequalChars() {
String str1 = "abcd";
String str2 = "abc";
String commonChars = "";
for (int i = 0; i < str.length(); i++) {
for (int j = 0; j < str2.length(); j++) {
if (str.charAt(i) == str2.charAt(j)) {
commonChars += str.charAt(i);
}
}
}
for(int i = 0; i < commonChars.length(); i ++)
{
String charToRemove = commonChars.charAt(i)+"";
str = str.replace(charToRemove, "");
str2 = str2.replace(charToRemove, "");
}
String s3= str+str2;
System.out.println(s3);
}
但是代码的问题是,如果我们有重复的字符,则此解决方案将不起作用。
例如 :
String str1 = "abccd";
String str2 = "abc";
预期的输出是“ cd”,但是上面的代码仅打印“ d”
是否有解决此问题的解决方案?
最佳答案
除了使用str.replace()之外,还可以使用str.replaceFirst()来保留其他出现的字符。
您还只需要使用较短的字符串代替commonChars,然后跟踪较短的字符串中较长的字符。
因此,它看起来像:
public String uncommonCharacters(String str, String str2){
String shorterString;
String longerString;
if (str.length() < str2.length()){
shorterString = str;
longerString = str2;
} else {
shorterString = str2;
longerString = str;
}
StringBuilder charsNotInLongString = new StringBuilder();
for(String charToRemove : shorterString.split("")) {
String newLongerString = longerString.replaceFirst(charToRemove, "");
if (newLongerString.equals(longerString)) {
charsNotInLongString.append(charToRemove);
} else {
longerString = newLongerString;
}
}
return longerString + charsNotInLongString.toString();
}
编辑:woops没意识到它已经被添加到commonChars两次,根据评论进行了更新。
更新:刚回到家,更新得更漂亮
关于java - 如何在两个String中查找导致它们不相等的字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52881791/