2013-04-07 6 views
0

Это правильный метод сортировки ArrayList? Проблема в том, что список не отсортирован.Это правильный способ сортировки?

out = new StringTokenizer(input.toString()); 
n = (out.countTokens()); 
for (int i = 0; i < n; i++) { 
    String[] words = { out.nextToken().toString() }; 
    final List<String> wordList = Arrays.asList(words); 
    Collections.sort(wordList); 
    System.out.println(wordList.toString()); 
} 
+2

Почему вы не перемещаете сортировку за пределы петли? – Maroun

+0

@Maroun Maroun By alphabyte – antoxa2584

ответ

3

Каждых из ваших words[] массивов состоит из одной строки, полученный из следующих маркеров вашего StringTokenizer. И вы повторяете в точном порядке токенизацию. Так что да, ваш выход будет не быть отсортированным. Я полагаю, что вы хотели сделать что-то вроде этого:

out = new StringTokenizer(input.toString()); 
int count = out.countTokens(): 
List<String> wordList = new ArrayList<String>(count); 
for(int i = 0; i < count; i++) { 
    wordList.add(out.nextToken()); 
} 
Collections.sort(wordList); 

Но, не использовать класс Tokenizer, его наследие. Следующий код послужит вам лучше:

List<String> wordList = Arrays.asList(input.split("\\s")); 
Collections.sort(wordList); 
+0

Можете ли вы сказать мне, как это исправить? – antoxa2584

+0

@ antoxa2584 - Я редактировал код. См. Обновленный ответ. – Perception

+0

И если мне нужно отсортировать его вторым символом, например, как я могу это сделать? – antoxa2584

0

out.nextToken().toString() дает вам одну строку. Я предполагаю, что длина вашего массива должна быть 1. Даже если вы поместите это в цикл, вы сортируете в каждом цикле, вам придется сортировать вне цикла.

StringTokenizer out = new StringTokenizer(input.toString()); 
List<String> wordList = new ArrayList<String>(); 
while(out.hasMoreTokens()) { 
    wordList.add(out.nextToken()); 
} 
Collections.sort(wordList); 
System.out.println(wordList.toString()); 
Смежные вопросы