我知道有一个String方法允许我比较两个字符串,称为compareTo。我试图写一个这种方法的修改版本。我的问题是,当找到2个字符之间的差异时,我的方法停止。例如:
public static int stringCompare(String s1, String s2) {
int i = 0, n1, n2;
while(true) {
if (s1.length() <= i && s2.length() <= i) {
return 0;
} else if (s1.length() <= i) {
return -s2.charAt(i);
} else if (s2.length() <= i) {
return s1.charAt(i);
} else {
n1 = s1.charAt(i);
n2 = s2.charAt(i);
if (n1 != n2) {
i++;
return n1 - n2;
} else {
i++;
}
}
}
}
我的主要看起来像这样:
public static void main(String[] args) {
String str1 = "AB";
String str2 = "AA";
System.out.print(stringCompare(str1, str2));
}
比较的结果是1,因为角色&#39; B&#39;在字符集中等于66,并且&#39; A&#39;等于65 - &gt; 66 - 65 = 1.这意味着String str1大于str2。
如果我更改了字符串并为它们两个添加了一个字符,那么字符索引1之后的剩余字符,在我的情况下&#39; A&#39;和&#39; B&#39;,不会被比较。
这是更新后的主页,它会给我与前一个相同的结果。
public static void main(String[] args) {
String str1 = "ABA";
String str2 = "AAB";
System.out.print(stringCompare(str1, str2));
}
即使两个字符串的值都等于0((65 + 66 + 65) - (65 + 65 + 66)),结果为1,因为字符串索引2处的字符(&#39; A&#39)和&#39; B&#39;)将不会被比较。
Strings的实例方法给出了相同的结果。即使我使用方法str.compareTo(str),比较的值也是1.
有人可以解释我如何修改我的功能,所以其他字符将包含在比较中吗?
谢谢。
答案 0 :(得分:1)
问题是,一旦找到差异,你就会回来
if(n1 != n2)
{
i++;
return n1 - n2;
}
相反,为了继续计算,你需要一个和变量
int sum = 0; //at the start of the method
[...]
if(n1 != n2)
{
i++;
sum += n1 - n2;
}
[...]
return sum; //at the end of the method
这可以做得更清洁
int stringCompare(String a, String b)
{
int sum = 0;
for(int i = 0; i < a.length() && i < b.length(); i++)
sum += a.charAt(i) - b.charAt(i);
return sum;
}
如果考虑了所有字符,您可以在
之后循环过量int stringCompare(String a, String b)
{
int sum = 0;
for(int i = 0; i < a.length() && i < b.length(); i++)
sum += a.charAt(i) - b.charAt(i);
for(int i = b.length(); i < a.length(); i++)
sum += a.charAt(i);
for(int i = a.length(); i < b.length(); i++)
sum -= b.charAt(i);
return sum;
}
或者总结和减去
int stringCompare(String a, String b)
{
int sum = 0;
for(int i = 0; i < a.length(); i++)
sum += a.charAt(i);
for(int i = 0; i < b.length(); i++)
sum -= b.charAt(i);
return sum;
}
答案 1 :(得分:0)
遍历字符串中的字符。 在他们不匹配的地方,存储差异。 最后返回总差异。