2012-04-10 73 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