我正在阅读一个文本文件,我想找到正确的文本标记。但我在句子末尾有点问题。我的代码是以下代码,查询意味着输入字符串:
query = query.replaceAll("[^\\p{L}\\s0-9-_/.]", "");
query = query.replaceAll("\t", " ");
query = query.replaceAll("\r", " ");
query = query.replaceAll("\n", " ");
StringTokenizer words = new StringTokenizer(query, " ");
while(tokens.hasMoreTokens()){
String str=tokens.nextToken();
String regex = "\\d+.\\d+";
if(!str.matches(regex)) *<- second problem*
System.out.println(str);
例如;输入文本是以下行
THE WORLD OF UNIQUE VENDING CARTS. fy_lkaris@yahoo.com www.ubc_lib?9867.come/homepage 876454 9890-9999-9099.
我希望以下字符串作为输出
THE WORLD OF UNIQUE VENDING CARTS
fy_lkaris@yahoo.com
www.ubc_lib?9867.come/homepage
9890-9999-9099
但是我的实际输出在第一行和最后一行输出结束时有点。 我不能删除点(。),因为它从每个地方删除。
THE
WORLD
OF
UNIQUE
VENDING
CARTS.ff_lashkariyahoo.com *<-problem*
www.unb_lib9867.come/homepage
9890-9999-9099. *<-problem*
另外我想只删除像4,764,90.900而不是76-098-098这样的数字,我找不到比使用匹配功能更好的功能。是否有办法解决这个问题。< / p>
你能帮我吗?
答案 0 :(得分:1)
问题是在字符类中间存在未转义的连字符。只有当连字符放置在字符类中的开始或结束位置时,才能取消连字符。
使用此:
query = query.replaceAll("[^\\p{L}\\s0-9_/.-]", "");
当连字符出现在中间时,它会作为范围。在你的情况下,它创建一个数字9(ASCII:57)和下划线(ASCII:95)之间的范围。
答案 1 :(得分:0)
我找到了解决问题的方法。我将我的代码更改为以下代码,它可以正常工作。
query = query.replaceAll("[^\\p{L}\\s0-9-_/.@]", "");
query = query.replaceAll("\t", " ");
query = query.replaceAll("\r", " ");
query = query.replaceAll("\n", " ");
StringTokenizer words = new StringTokenizer(query, " ");
while(tokens.hasMoreTokens()){
String str=tokens.nextToken();
str = str.replaceAll("\\.\\B" , " "); *<-new line*
String regex = "\\d+.\\d+";
if(!str.matches(regex)) *<- second problem*
System.out.println(str);