Сортировка адреса электронной почты с помощью CompareTo () возвращает неожиданный результат - PullRequest
0 голосов
/ 24 марта 2020

Я новичок ie до Java и пытаюсь отсортировать адрес электронной почты в алфавитном порядке, используя compareTo(), но результат не тот, который я ожидаю. Я поставил вопрос в коде, не могли бы вы посоветовать?

public class SortTest {
    public static void main(String[] args) {
        String text1= "customer1@example.com";
        String text2 = "customer10@example.com";
        System.out.println(text1.compareTo(text2)); //Result is 16. Why? I expect a negative number as result.

        String text3= "customer1";
        String text4 = "customer10";
        System.out.println(text3.compareTo(text4)); //result is -1 which is correct.        
    }

}

ОБНОВЛЕНИЕ: Я хочу отсортировать по возрастанию с text1 и text2 выше, ожидаемый результат в порядке "customer1@example.com" тогда "customer10@example.com". Не могли бы вы посоветовать, как этого добиться?

Ответы [ 2 ]

3 голосов
/ 24 марта 2020

Посмотрите на таблицу Ascii - http://www.asciitable.com/index/asciifull.gif

'@' De c значение равно 64, а '0' de c равно 48.

Теперь, если вы делаете (64-48) = 16.

3 голосов
/ 24 марта 2020

Посмотрите на javado c:

Если нет позиции индекса, в которой они отличаются, то более короткая строка лексикографически предшествует более длинной строке. В этом случае, CompareTo возвращает разницу длин строк, то есть значение

. Это объясняет второй пример.

В первом "0" лексикографически перед "@". Вы можете просто проверить это, запустив:

"@".compareTo("0")

, что приведет к значению 16.

Или другим способом:

(int) '@' // 64
(int) '0' // 48

Таким образом, разница составляет 16 .

Редактировать: чтобы сравнивать электронные письма так, как вы хотите, вам нужно задействовать еще несколько логик c, например, сравнивать только часть логина (удалить домен, разделенный "@"): str1.split("@")[0].compareTo(str2.split("@")[0])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...