我一直在阅读以前的字符串比较问题,并且所有这些问题都使用的方法与我使用的方法不同。也许他们的方法要好得多,但我想用我的方法来解决这个问题。我正在尝试编写一个比较两个字符串的函数,并输出一个按字母顺序排列的函数,其中大写字母始终被认为是在小写字母之前。 Java的compareTo方法不起作用,因为它在字母顺序排列时忽略了字母大小写。
我在while循环中放入一个for循环。当for循环检测到一个字符串的字母小于另一个字母的ASCII值时,它应该退出while循环并且不完成for循环,这应该发生。但是,该程序应该返回“cdf”,但它返回“dbc”,即使c在字母表中的d之前。为什么程序返回'dbc'而不是'cdf'?
public class Alphabet {
public static String min_compare(String str1, String str2) {
int a = 0;
while (a == 0) {
for (int i = 0; i < str1.length(); i++) {
int b = (int) str1.charAt(i);
int c = (int) str2.charAt(i);
if (b < c) {
a = 1;
} else if (b > c) {
a = 2;
} else if ((b == c) && (i == (str1.length() - 1))) {
a = 1;
} else {
a = 0;
}
}
}
if (a == 2) {
return str2;
} else {
return str1;
}
}
public static void main(String[] args) {
String check = min_compare("dbc", "cdf");
System.out.println(check);
}
}
答案 0 :(得分:1)
不需要while
循环;如果在a
循环结束后for
为0,则再次运行for
循环不会导致不同的结果,从而导致无限循环。
您为 a
的每个字符设置str1
;因此,a
的最终值将仅由for
循环的最后一次迭代确定,忽略之前的内容。
答案 1 :(得分:1)
Java的compareTo方法不起作用,因为它在字母顺序排列时忽略了字母大小写。
这是不正确的。 String.compareTo(String)
被指定为按字典顺序排列字符串 ,javadoc描述如下:
“这是字典排序的定义。如果两个字符串不同,那么它们在某个索引处有不同的字符,这两个字符串是两个字符串的有效索引,或者它们的长度是如果它们在一个或多个索引位置具有不同的字符,则令k为最小的索引;然后使用
<
运算符确定的位置k处的字符具有较小值的字符串,按字典顺序排在另一个字符串之前。“
如果你仔细阅读,你会发现它不会忽略大小写。此外,如果您查看Unicode代码图表,您会看到大写字母位于相应的小写字母之前...至少对于拉丁字母表中的非重音字母。
因此compareTo
方法会根据您的需要订购字符串,前提是您已在问题中正确说明了您的要求。
查看您的方法,我注意到它没有实现标准int compare(String, String)
签名。所以你不能用compareTo直接替换它。
我还可以看到一个错误:如果str2
的前缀是str1
,str1
的前缀更长,那么您将获得例外。
实际上,您的方法可以(正确地)重写为:
public static String minCompare(String str1, String str2) {
return str1.compareTo(str2) > 0 ? str2 : str1;
}
答案 2 :(得分:1)
你提到了
它应该退出while循环并且不完成for循环
但是,您尚未在代码中实现它。我添加了破解嵌套循环代码。希望它会有所帮助。 THX。
public class Alphabet {
public static String min_compare(String str1, String str2) {
int a = 0;
whileloop:
while (a == 0) {
for (int i = 0; i < str1.length(); i++) {
int b = (int) str1.charAt(i);
int c = (int) str2.charAt(i);
if (b < c) {
a = 1;
break whileloop;
} else if (b > c) {
a = 2;
break whileloop;
} else if ((b == c) && (i == (str1.length() - 1))) {
a = 1;
break whileloop;
}
else {
a = 0;
}
}
}
if (a == 2) {
return str2;
} else {
return str1;
}
}
public static void main(String[] args) {
String check = min_compare("dbc", "cdf");
System.out.println(check);
}
}