Здесь я читал предыдущие вопросы сравнения строк, и все они используют подход, отличный от того, который я использую. Возможно, их подход намного лучше, но я хочу получить это, используя мой подход. Я пытаюсь написать функцию, которая сравнивает две строки и выводит ту, которая сначала в алфавитном порядке, где заглавные буквы всегда считаются предшествующими строчными буквами. Метод сравнения Java Java не будет работать, поскольку он игнорирует регистр букв в алфавитном порядке.Необычное сравнение строк Java
Я помещаю цикл for внутри цикла while. Когда цикл 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);
}
}
Хорошо, я задал вопрос. –
Отлично, спасибо! Теперь, что вы видите, когда запускаете это через отладчик? –
«Метод сравнения Java Java не будет работать, потому что он игнорирует регистр букв при алфавитном оформлении». -- Это неправда. String.compareTo [использует кодовую точку каждого символа] (https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#compareTo-java.lang.String-) и в «ASCII-часть» юникода, по крайней мере, все заглавные буквы относятся ко всем строчным буквам. Например, «Aaa» <«aaa». – yshavit