我正在进行文本挖掘。当文本在他/她的文档中使用Enter时(/ br,如果是HTML),我的程序也需要标记化。现在我的程序只能检测'空间'。怎么做? 这是我的代码:
private ArrayList tokenize(String inp) {
ArrayList<String> out = new ArrayList<String>();
String[] split = inp.split(" ");
for (int i = 0; i < split.length; i++) {
if (!split[i].isEmpty()) {
out.add(split[i]);
}
}
return out;
}
答案 0 :(得分:0)
你确定在输入处分裂还没有工作吗?因为有了这个:
String s = "Hi b\nb bye";
System.out.println(s);
System.out.println();
String [] ss = s.split(" ");
for(String s2 : ss)
{
System.out.println(s2);
}
这是我的输出:
Hi b
b bye
Hi
b
b
bye
正如您所看到的,字符串在空格处和新行处分开(即使空格是唯一的正则表达式)。但是,如果这对您不起作用,您可以循环遍历String数组并调用String.split("\n")
。然后,您只需将新的拆分字符串添加到ArrayList。
答案 1 :(得分:0)
您还可以使用简单的正则表达式来执行您想要的操作:
String input = "Line of text \nAnother line<br><br><br />html<br />line";
String [] parts = input.split("\\s+|(<br>|<br\\s*/>)+");
System.out.println(Arrays.asList(parts));
它还可以连续替换多个空格/分隔线。正则表达式可以很好地完成这类任务。
输出:
[Line,of,text,Another,line,html,line]
解释:\s
是所有空格(空格,制表符,换行符)的缩写。 \s+
表示一个或多个空格。 <br>|<br\\s*/>
表示<br>
或<br/>
或<br />
或<br />
。他们在一个群组中:(<br>|<br\\s*/>)
,因此我们可以使用+
来识别其中的一个或多个。
整个内容:一个或多个空白字符或<br>
的一个或多个不同版本。
所以你的tokenize方法看起来像这样(如果使用java 1.5或更高版本,则使用泛型):
private List<String> tokenize(String inp) {
List<String> out = new ArrayList<String>();
String[] split = inp.split("\\s+|(<br>|<br\\s*/>)+");
for (String s : split) {
if (!s.isEmpty()) {
out.add(s);
}
}
return out;
}