2012-04-10 70 views
0

好的,我已經問過關於這個問題的另一個問題,我已經解決了,但下面是我想要做的簡要解釋:我希望能夠從文本文件中提取文本作爲標記 - 例如,說我有一個包含句子的文本文件:令牌跳過空格?

這是一個很好的餐廳,

相信我!

我想提取這個內容作爲「標記」 - 例如,一個標記將是「它是」,下一個標記將是「」,之後的那個將是「一個」,然後「」,然後是「好」,然後是「餐館」,然後是「,」和「\ n」,然後是「相信」,「」,「我」,「!」。所以我猜想一個方法就是令牌不是單詞就是單詞。

這裏是我到目前爲止的代碼:

/** 
* Returns the next token, or throws a NoSuchElementException if none remain. 
*/ 
public Token next() { 
    if (c == -1) { 
     throw new NoSuchElementException(); 
    } 

    Writer sw=new CharArrayWriter(); 
    boolean trf=false; 
    try { 
     while (c != -1 && isWordCharacter(c)) { 
       sw.write(c); 
       c = r.read(); 
       trf=true; 
     } 
     while (c != -1 && !isWordCharacter(c)) { 
      if (Character.isWhitespace(c)&&!(trf==true)){ 
       sw.write(c); 
       c=r.read(); 
       } 
      else if (Character.isWhitespace(c)&&(trf==true)){ 
       c=r.read(); 
      } 
      else{ 
       sw.write(c); 
       c = r.read(); 

      } 
     } 
    } catch (IOException e) { 
     c = -1; 
     return new Token(trf, sw.toString()); 
    } 
    return new Token (trf, sw.toString()); 
} 

的問題是,我跳過空格,這樣反而讓「它」,「」,「一」,「」,「好」等,我得到「它是」,「一個」,「好」,而不用將空白作爲標記。有沒有人有什麼問題的提示?謝謝!

回答

0

這是一個鏈接到reference
StringTokenizer(String str, String delim, boolean returnDelims)

作爲最後一個參數表明,它也會返回分隔符。

StringTokenizer str = new StringTokenizer(sentence," \n\r",true);

while(str.hasMoreTokens()) 
{ 
    System.out.println(str.nextToken()); 
} 

這應該給你想要的東西。希望能幫助到你。

+0

它會打印令牌和分隔符嗎? – noMAD 2012-04-10 03:11:42

+0

是的,它也會打印分隔符,試試看。 – nikhil 2012-04-10 03:14:25

0

只要做到:

StringTokenizer str = new StringTokenizer(sentence); 
ArrayList<String> arr = new ArrayList<String>(); 
while(str.hasMoreTokens()) 
{ 
    //arr.add(" "); Be careful to add this only after the first word 
    arr.add(str.nextToken()); 
} 

添加包括" "每個令牌之後的你的邏輯。它很簡單;)

+0

沒有必要爲包含標記添加單獨的邏輯,stringtokenizer爲此提供了構造函數。 – nikhil 2012-04-10 03:03:19