java - 如何在两个字符串中找到导致它们不相等的字符?
问题描述
我想在两个字符串中找到使它们不相等的字符并打印它们。
例如:
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.replaceFirst() 来保留其他出现的字符,而不是使用 str.replace()。
您还只需要使用较短的字符串来代替 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,根据评论更新。
更新:刚到家,更新更漂亮