java中的两个字符串的字符串长度是错误的?

时间:2014-11-26 05:14:36

标签: java string duplicate-removal

这里我有两个字符串name1和name2,如果字母是重复的,并且最少出现时间必须删除.Eg:String name1="raja"name2="rani"在'r'中必须从两者中删除'a'在name1中出现2次,在name2中出现1次,所以只有'a'必须从name1和name2中删除1次,最后我需要得到输出为:'jani',长度为4.但这里长度为3。这是我的代码。

String name1 = "raja";
String name2 = "rani";
for (int i = 0; i < name1.length(); i++) {
    for (int j = 0; j < name2.length(); j++) {
        if (name1.charAt(i) == name2.charAt(j)) {
            name1 = name1.replace(name1.charAt(i), '\0');
            name2 = name2.replace(name2.charAt(j), '\0');
        }
    }
}
String result = name1 + name2;
String result = result.replaceAll("\0", "");
int resultLength = result.length(); //need to get 4.

您的帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

试试这段代码:

String name1 = "raja";
String name2 = "rani";
for (int i = 0; i < name1.length(); i++) {
    for (int j = 0; j < name2.length(); j++) {
        if (name1.charAt(i) == name2.charAt(j)) {       
            name1 = name1.replaceFirst(String.valueOf(name1.charAt(i)), "#");
            name2 = name2.replaceFirst(String.valueOf(name2.charAt(j)), "#");
            break;

        }
    }
}
String result = name1 + name2;
result = result.replaceAll("#","");
int resultLength = result.length(); //need to get 4.
System.out.println(result);
System.out.println(resultLength);

我认为代码是自我解释的,如果你对代码中没有任何理解,你可以发表评论。

答案 1 :(得分:1)

对于这样一个简单的任务,你有方式太多的代码。

在伪代码中:

  • 表示name1中的每个char
    • 从name2中删除1次出现的char

在java中,只比伪:

更多
for (int i = 0; i < name1.length(); i++)
    name2 = name2.replaceFirst(name1.substring(i, i + 1), "");

这就是你所说的角色操作所需的所有代码。

编辑:

我刚刚意识到它可以做得更整齐:

for (String letter : name1.split("(?<=.)"))
    name2 = name2.replaceFirst(letter, "");

正则表达式在每个字母后传递给分裂分裂 - 整齐地给出一个字母数组作为字符串。