我试图检查数组中两个字符串的位置是否不同。例如,如果我有字符串apple
和字符串appendix
,那么两个字符串在i = 3的位置是不同的。
如何使用Java检查?
代码
//The first string is s.
char[] cArray = s.toCharArray();
// The seond string is root.edge.
char[] rootEdgeCharacter = root.edge.toCharArray();
for(int i=0; i<cArray.length; i++ ){
for(int j=0; j<rootEdgeCharacter.length; j++){
if(cArray[i]== rootEdgeCharacter[j]){
System.out.println("The String are different where i =" + i);
}
}
}
答案 0 :(得分:5)
不要使用.toCharArray()
,它会不必要地创建一个 new 字符数组。改为使用.charAt()。
更重要的是,你的代码不会走向数组&#34;并行&#34;:你在索引0,0,然后是1,0,然后是3等等迭代。这不是你想要的。
这是一个解决方案;请注意,对于不等长的字符串,它将返回较小的长度,并且两个字符串相等,它返回-1:
public static int findDifferingIndex(final String s1, final String s2)
{
final int len1 = s1.length();
final int len2 = s2.length();
final int len = Math.min(len1, len2);
for (int index = 0; index < len; index++)
if (s1.charAt(index) != s2.charAt(index))
return index;
// Check the length of both strings; if they are equal, return -1.
// Otherwise return the length `len`.
return len1 == len2 ? -1 : len;
}
答案 1 :(得分:1)
你可以做的是遍历数组并一次获得2个字符串。
使用getDiff
方法检查这些差异。
方法查找字符,直到找到不匹配。
a p p l e
a p p l y
^
逐个字符检查,直到发现不匹配。
String [] arr = {"apple", "apply", "application", "apraisal"};
for(int i = 0; i < arr.length; ++i)
{
for(int j = i + 1; j < arr.length; ++j)
{
System.out.println(arr[i] + " " + arr[j] + " " + getDiff(arr[i], arr[j]));
}
}
public static int getDiff(Stirng s1, String s2)
{
for(int i = 0; i < Math.min(s1.length, s2.length); ++i)
if(s1.charAt(i) != s2.charAt(i))
return i;
return -1;
}