[英]Unusual String Comparison Java
我在這里閱讀了以前的字符串比較問題,並且所有問題都使用與我正在使用的方法不同的方法。 也許他們的方法要好得多,但是我想用我的方法來解決。 我正在嘗試編寫一個比較兩個字符串並輸出按字母順序排列的字符串的函數,在該函數中大寫字母始終被認為在小寫字母之前。 Java的compareTo方法將不起作用,因為它在按字母順序排列時會忽略字母大小寫。
我將for循環放入while循環中。 當for循環檢測到一個字符串的一個字母小於ASCII值的另一個字母時,它應該退出while循環,並且不應該完成for循環。 但是,該程序應該返回“ cdf”,但是即使c在字母d之前也返回“ dbc”。 為什么程序返回“ 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);
}
}
不需要while
循環; 如果在for
循環完成后a
為0,則再次運行該for
循環不會導致不同的結果,從而導致無限循環。
您為str1
每個字符設置a
; 因此,最終值a
只會通過的最后一次迭代中確定for
循環,無視之前什么來。
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;
}
你提到
它應該退出while循環,而不是完成for循環
但是,您尚未在代碼中實現它。 我添加了中斷嵌套循環代碼。 希望它會有所幫助。 謝謝。
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.