0

我一直在阅读很多关于使用分隔符和模式的问题和答案,但仍然很难弄清楚这一点。我想阅读一个可能会或可能不会混乱的文本文件并从中挑选单词。所以像这样的输入

"the.dog,jumped over the hole@bob's house"

这会给我以下的话

[the, dog, jumped, over, the, hole, bob's, house]

然后我会对每个单词做一些事情。

Scanner s1 = new Scanner(fileName);
while(s1.hasNext()){
temp = s1.next(String pattern = "no clue");
    //do something with temp
}

我觉得模式是最好的方法,但是我如何制作一个包含任何变体字符的模式,只要它以字母开头并在到达这些字符中的任何一个时结束?. , * % " ( ) & $ ? < > ! - : ; @ #或任何类型的white space.

我知道我可以以非常糟糕的运行时间效率以非常丑陋的方式做到这一点。任何帮助将不胜感激,或者指向另一个可能对我没有帮助的问题。

4

4 回答 4

1

像下面这样的东西应该可以工作:

Scanner s1 = new Scanner(fileName).useDelimiter("[^\\p{L}']+");
while(s1.hasNext()) {
    String temp = s1.next();
    System.out.println(temp);
}
于 2013-02-05T04:51:17.517 回答
0

我认为您所需要的只是在函数中指定所有定界符scanner.useDelimiter,这是一个示例,可以按照您的指定(. , @ space用作定界符)拆分您的测试句子。您可以根据需要在模式表达式中添加更多分隔符。

Scanner scanner = new Scanner("the.dog,jumped over the hole@bob's house");
scanner.useDelimiter("\\.|\\,|\\@|\\s");

while (scanner.hasNext()) {
    String temp = scanner.next();
    System.out.println(temp);
}

如果您想忽略重复的分隔符,例如“the....dog,,,jumped”,您可以使用以下模式作为分隔符scanner.useDelimiter("\\.+|\\,+|\\@+|\\s+");,它只+在分隔符之后添加

于 2013-02-05T04:50:13.780 回答
0

您可以在扫描仪上设置分隔符,这应该可以为您完成这项工作。

Scanner s = new Scanner("the.dog,jumped over. the hole@bob's house.in land");
String pattern = "\\s|\\.|,|@" ;
s.useDelimiter(pattern);
while(s.hasNext()){
  String temp = s.next();
  //do something with temp
}

您可以在模式字符串中添加所有分隔符。您应该转义(使用 \\)在正则表达式中具有特殊含义的字符,例如 .(dot),有关此类字符的详细列表,请参阅此链接

于 2013-02-05T05:04:31.753 回答
0

把事情简单化:

String[] a = "the.dog,jumped over. the hole@bob's house.in land".split("\\s|\\.|,|@");
for(int i=0; i< a.length;i++){
 String temp = a[i];
  //do something with temp
}

split() 接受正则表达式...使用它...

于 2013-02-06T10:01:57.943 回答