2014-12-10 4 views
1

я пытаюсь отсортировать строки в Java, ниже мой код:Сортировка строки в Java

public class SortingString { 

    public static void Sortstring(){ 
     String str="String"; 
     char [] charStr = str.toCharArray(); 
     for (char value : charStr) { 
       System.out.println("Value = " + value); 
      } 

     Arrays.sort(charStr); 

     System.out.println("The sorted array is:"); 
     for (char value : charStr) { 
       System.out.println("Value = " + value); 
      } 

    } 

    public static void main(String [] args){ 
     Sortstring(); 
    } 
} 

Так что, когда я даю вход Str = «Java», это дает мне:

Value = J 
Value = a 
Value = v 
Value = a 
The sorted array is: 
Value = J 
Value = a 
Value = a 
Value = v 

И когда я даю ввод ул = «String», это дает мне:

Value = S 
Value = t 
Value = r 
Value = i 
Value = n 
Value = g 
The sorted array is: 
Value = S 
Value = g 
Value = i 
Value = n 
Value = r 
Value = t 

Я не понимаю, почему не сортировать все символы. Это не сортировка первого символа, но он хорошо работает для отдыха персонажей в String. Что мне не хватает?

+0

Вы должны использовать [сверять ваш 'String's] (https://docs.oracle.com/javase/tutorial/i18n/text/ collationintro.html), если вы хотите специальный порядок сортировки. –

+0

Да, ты прав! Спасибо за помощь! – zydexo

ответ

6

Что вам не хватает в том, что латинские прописные буквы сравниваются меньше, чем Латинские строчные буквы. Соответствующую часть кодовой диаграммы символов Юникода можно найти here.

Если вы хотите, чтобы это было по-другому, вам нужно предоставить свой собственный компаратор. См. How to use Comparator in Java to sort

Один из способов достижения желаемого поведения заключается в том, что компаратор преобразует обе буквы в нижний регистр, а затем сравнивает результат.

3

Способ сортировки, при использовании на примитивных массивов (таких как char[], int[] и т.д.) использует операторы отношений (например, > и <), чтобы сравнить различные элементы.

Поскольку все прописные буквы «меньше», чем их строчные символы, результирующий массив не сортируется в алфавитном порядке.

выражение ниже, поможет вам понять, что происходит во время выполнения алгоритма сортировки:

'A' < 'a' // true 
(int) 'A' // 65 
(int) 'a' // 97 

Когда метод sort выполняются на объектах значение, возвращаемое методом compareTo (определенно в Comparable) используются для определения порядка результирующего массива.

Если вы хотите отсортировать массив строк в алфавитном порядке (игнорируя регистр), вы можете использовать встроенный компаратор CASE_INSENSITIVE_ORDER. Пример ниже:

Arrays.sort(arrayOfStrings, String.CASE_INSENSITIVE_ORDER); 

Или еще:

Collections.sort(listOfStrings, String.CASE_INSENSITIVE_ORDER); 
Смежные вопросы