2014-07-06 76 views
0

我讀過多個文件並使用StringTokenizer讀取令牌,但我的問題是它讀取「Geneliad'souza」,但我希望它作爲「geneliad」和「souza」作爲單詞。你能解釋一下這個邏輯的代碼嗎?讀取多個文件,然後分離字符串

一個單詞以字母(A-Z或a-z)開始,並一直持續到遇到非字母(或EOF)。

一個從我的代碼片段:

String line = fileReader.nextLine(); 
String word = null; 

StringTokenizer st = new StringTokenizer(line); 

while (st.hasMoreTokens()) { // while2 starts 
    word = st.nextToken().toLowerCase(); 
    ... 
+0

我試圖在Java中使用正則表達式,但這想不出工作 – user138289

+0

@TheLostMind:野應是一個單詞以字母(AZ或az)開始,並一直持續到一個非字母(或EOF)遇到的唯一條件 – user138289

+0

在StringTokenizer中使用delim – SparkOn

回答

0
String line = fileReader.nextLine(); 
String[] tokens = line.split("[^a-zA-Z]+"); 
for(String token : tokens) { 
    System.out.println(token); 
} 

使用StringTokenizer是相當混亂,從不首選複雜的分裂,但是這可能給你如何使用它的一個總體思路。

StringTokenizer st = new StringTokenizer(line," !?,[email protected]#$%&_-*^/\"'`\\t\\n\\"); 
+1

也在這裏:在模式結尾添加一個'+'。 – laune

+0

非常感謝幫助我的lotzz – user138289

1

StringTokenizer是不應該(感謝,laune)要與一個以上的String作爲分隔符使用,但是你想讓它有一些變體使用。 此外,作爲javadoc說,「StringTokenizer的是保留兼容性原因遺留類」,所以你應該避免它的使用的代碼,並用這樣的方式:

String[] words = line.split("[^a-zA-Z]+"); 

這裏正則表達式將只匹配任何字符(字符序列),除了字母。

+0

StringTokenizer的第二個參數是* not *正則表達式。第二個建議應該有一個+的模式。 – laune

+0

@laune yep,你是對的。很快就會解決答案。 –

+0

@laune - 刪除我的評論,要求OP嘗試相同的。不知道他到底想要什麼:P。檢查他的評論。 – TheLostMind

相關問題