我使用下面的代码在两个字符串中查找常见字符。有时这段代码产生错误的结果,例如给出大于字符串长度的输出值。
for(int i = 0;i < num1.length();i++){
for(int j =0;j < num2.length();j++){
if(num1.charAt(i) == num2.charAt(j)){
count++;
}
}
}
答案 0 :(得分:8)
目前还不清楚你想要达到的目标。
由于在字符串中出现多次的字符,您的代码可能会产生大于字符串长度的结果。您可以获得最多num1.length()* num2.length()的结果。
如果您想获得两个字符串中具有相同字符的位置数,您可以在一个循环中使用相同的索引并使用#34; charAt&#34;调用两个字符串:
for(int i = 0; i < num1.length() && i < num2.length(); i++) {
if(num1.charAt(i) == num2.charAt(i)){
count++;
}
}
如果您想获得两个字符串中出现的唯一字母数,请单独浏览两个字符串并将字母添加到集合中。然后相交两组。结果集中的元素数量是您的结果:
Set<Character> characters1 = new TreeSet<Character>();
for(int i = 0; i < num1.length(); i++) {
characters1.add(num1.charAt(i));
}
Set<Character> characters2 = new TreeSet<Character>();
for(int i = 0; i < num2.length(); i++) {
characters2.add(num2.charAt(i));
}
characters1.retainAll(characters2);
return characters1.size();
答案 1 :(得分:1)
您可以使用HashSet
尝试这样的操作import java.util.HashSet;
import java.util.Set;
public class QuickTester {
public static void main(String[] args) {
String s1 = "happy";
String s2 = "elephant";
Set<Character> set1 = new HashSet<Character>();
Set<Character> set2 = new HashSet<Character>();
for(char c : s1.toCharArray()) {
set1.add(c);
}
for(char c : s2.toCharArray()) {
set2.add(c);
}
// Stores the intersection of set1 and set2 inside set1
set1.retainAll(set2);
for(char c : set1) {
System.out.print(" " + c);
}
System.out.println("\nTotal number of common characters: "
+ set1.size());
}
}
请参阅retainAll关于如何完成2组的交集。
输入字符串:
happy
elephant
<强>输出:强>
p a h
Total number of common characters: 3
答案 2 :(得分:1)
使用org.apache.commons.lang.StringUtils计算这样的匹配
String num1 = "Java";
String num2 = "Guava";
int count = 0;
List<String> charsChecked = new ArrayList<>();
for(int i = 0;i < num1.length();i++){
String charToCheck = num1.substring(i, i+1);
if (!charsChecked.contains(charToCheck)) {
count += StringUtils.countMatches(num2, charToCheck);
charsChecked.add(charToCheck);
}
}
System.out.println(count);
这导致上例中的计数为3