我想在两个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/

10-10 03:16