好的,我已经提出了另一个关于此问题的问题,我已经解决了,但这里有一个我想要做的简要说明:我希望能够从文本文件中提取文本作为标记 - 例如,说我有一个包含句子的文本文件:
这是一家不错的餐厅,
相信我!我想将其内容提取为'令牌' - 例如,一个令牌将是“它”,下一个令牌将是“”,之后的那个将是“a”,然后是“”,然后“好”,然后是“餐馆”,然后是“,”和“\ 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 :(得分: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());
}
在每个令牌后添加包含" "
的逻辑。它非常简单;)
答案 1 :(得分: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());
}
这应该可以满足您的需求。希望它有所帮助。