2014-01-21 87 views
0

我附上下面的代碼排序一個字符串,我想解決這爲使用Java集合

class sort{ 
    public static void main(String args[]) 
    {String a ="this is a kiran"; 
    StringTokenizer st =new StringTokenizer(a); 
    List f=new ArrayList(); 
    f.add(st); 
    Collections.sort(f); 
    System.out.println("after sortting "+f); 
    } 
} 

我想作爲輸出:

a 
is 
kiran 
this 

但我得到一個例外,因爲: -
線程「main」中的異常java.lang.ClassCastException:java.util.StringTokenizer不能轉換爲java.lang.Comparableat java.util.Collections.sort(UnknownSource)atcom.sort.main(Sort.java:18)

+2

爲什麼不使用string.split(「\\ s +」)而不是String tokenizer? – TheLostMind

+1

您不能只將StringTokenizer添加到列表中。使用StringTokenizer遍歷令牌。 –

+2

StringTokenizer類不實現Comparable接口。 _「列表中的所有元素必須實現Comparable接口。此外,列表中的所有元素必須相互可比(即,e1.compareTo(e2)不得爲列表中的任何元素e1和e2拋出ClassCastException)。 「_ –

回答

2

的問題是在這裏:

f.add(st); 

你加入StringTokenizer到列表中,而不是添加單獨的標記。更改爲使用泛型的代碼會幫助:如果你聲明的ListList<String>,代碼無法編譯,指點你在正確的方向:

List<String> f=new ArrayList<String>(); 

添加while循環從st收集令牌和將它們逐個添加到f

P.S.由於這幾乎肯定是一個學習練習,我不會通過完成代碼來破壞你的樂趣。

4

更改您的代碼。你需要糾正一些錯誤。

String a ="this is a kiran"; 
    StringTokenizer st =new StringTokenizer(a); 
    List<String> f=new ArrayList<>(); // use String type list 
    while (st.hasMoreTokens()){ // add all tokens by iterating st 
     f.add(st.nextToken()); // add tokens to list 
    } 
    Collections.sort(f); 
    System.out.println("after sorting "+f); 

輸出地說:

after sorting [a, is, kiran, this] 

現在你正在排序列表

1

您還可以使用hasMoreElements()nextElement()

class sort{ 
    public static void main(String args[]) { 
     String a ="this is a kiran"; 
     StringTokenizer st =new StringTokenizer(a); 
     ArrayList<String> f=new ArrayList<String>(); // use String type list 
     while (st.hasMoreElements()){ // add all by iterating st 
     f.add((String) st.nextElement()); // add tokens to list 
    } 
    Collections.sort(f); 
    System.out.println("after sorting "+f); 
    } 
} 
0

考慮使用String.split()拆分你的字符串。 類名應該是名詞, 方法名應該是動詞或動詞短語, 並且您應該使用泛型。

public static void main(String[] arguments) 
{ 
    String input = "this is hootberry sause"; 
    String[] inputArray; 
    List<String> inputList = new ArrayList<String>(); 

    inputArray = input.split(" "); 
    Collections.addAll(inputList, inputArray); 
    Collections.sort(inputList); 

    System.out.println("Before sort: " + input); 
    System.out.println("After sort: " + inputList); 
}