我使用Java Pattern类将正则表达式指定为字符串。正则表达式保留引号,单引号,连字符和空格分隔
所以例如 我喜欢蜘蛛侠“彼得·帕克”
应该列出蜘蛛侠“彼得·帕克”作为一个单独的令牌。 感谢
try {
BufferedReader br = new BufferedReader(new FileReader(f));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
line = br.readLine();
}
String everything = sb.toString();
List<String> result = new ArrayList<String>();
Pattern pat = Pattern.compile("([\"'].*?[\"']|[^ ]+)");
PatternTokenizer pt = new PatternTokenizer(new StringReader(everything),pat,0);
while (pt.incrementToken()) {
result.add(pt.getAttribute(CharTermAttribute.class).toString());
}
}
catch (Exception e) {
throw new RuntimeException(e);
}
,所以我想为什么“一些词”是行不通的,因为每个令牌本身就是一个字符串的原因。 任何线索?谢谢
您是否尝试过使用的StringTokenizer? – Sujay 2012-07-12 00:26:08
不,我读到在SO本身上使用它不是一个好习惯。所以我想使用一个Lucene API的patterntokenizer类,它需要一个正则表达式来将字符串拆分为令牌。 – YuNo 2012-07-12 00:30:11
我不认为你可以使用'split()'或类似的东西来处理这种情况。 – nhahtdh 2012-07-12 00:42:11