2013-04-17 54 views
0

分割命令之後打印出的字不是以升序打印出。我認爲我沒有把它放在代碼的正確位置,但我不確定是否放置它。它打印出整個文本段落的單詞,沒有任何標點符號,但不會按照升序(按字母順序)打印。任何幫助都會很棒。試圖找出爲什麼分割方法並不printg出右

public static void main(String[] args) throws 
     FileNotFoundException, IOException 
{ 
    Scanner ci = new Scanner(System.in); 
    System.out.print("Please enter a text file to open: "); 
    String filename = ci.next(); 
    System.out.println(""); 

    File file = new File(filename); 
    BufferedReader br = new BufferedReader(new FileReader(file)); 

    StringBuilder sb = new StringBuilder(); 
    String str; 

    while((str = br.readLine())!= null) 
    { 
     String sp[] = str.split("[\\s\\.,;:\\?!]+"); 
     for (String sr : sp) 
     { 
      System.out.println(sr); 
     }    

     sb.append(str); 
     sb.append(" "); 
     // System.out.println(str);    
    } 

    ArrayList<String> text = new ArrayList<>(); 
    StringTokenizer st = new StringTokenizer(sb.toString().toLowerCase()); 
    while(st.hasMoreTokens()) 
    { 
     String s = st.nextToken(); 
     text.add(s); 
    } 

    System.out.println("\n" + "Words Printed out in Ascending " 
          + "(alphabetical) order: " + "\n"); 

    List<String> arrayList = new ArrayList<>(text); 
    Collections.sort(arrayList); 
    for (Object ob : arrayList) 
    { 
     System.out.println("\t" + ob.toString()); 
    } 
} 
+0

你確定數組是否被排序? –

+0

你似乎先被分割在所有標點符號的字符串,然後把它粘到一起,然後再拆呢......任何理由再次粘合的陣列? – Kninnug

+0

數組並得到整理...我真的不知道爲什麼我這樣做,我沒有與分裂 – user2208495

回答

0

要打印的兩倍的話,你已經分裂標點符號後的文字,然後重新您已經粘合之後重新走到一起,再次分裂,並最終整理它。

然而,在行while你分裂每一行,但你然後忽略該分割的結果(除了打印它),你繼續添加原始行sb

你可能要將sbArrayList,然後(從spfor(sr : sp)循環sr)添加每個字sb和那種。

您可以再與StringTokenizer刪除全部和立即排序ArrayList。像這樣:

ArrayList<String> sb = new ArrayList<String>(); 
String str; 

while((str = br.readLine())!= null) 
{ 
    String sp[] = str.split("[^\\w]+"); 
    for (String sr : sp) 
    { 
     sb.add(sr); 
     // System.out.println(sr); 
    }   
} 
sb = Collections.sort(sb); 
+0

確定,所以它知道拆分和排序正確(感謝!),但它提出的是一個國會(大寫)字母開始的第一任字。不知道如何停止 – user2208495

+0

這是因爲資本是第一位的(ASCII-)字母,可以轉換的話將它們插入到'sb'時爲小寫。 (您的舊代碼在初始化'StringTokenizer'時會這樣做)。 – Kninnug

+0

我明白了,謝謝你的幫助! – user2208495

相關問題