这里我有两个字符串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.
您的帮助将不胜感激。
答案 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)
对于这样一个简单的任务,你有方式太多的代码。
在伪代码中:
在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, "");
正则表达式在每个字母后传递给分裂分裂 - 整齐地给出一个字母数组作为字符串。