【问题标题】:Scanner's delimiter and regex in javajava中扫描仪的分隔符和正则表达式
【发布时间】:2012-02-17 08:42:41
【问题描述】:

我正在尝试逐字阅读输入,但不知道如何将扫描仪的分隔符设置为空格和标点符号,除了 '(单引号)。 这是我得到的

BufferedReader input;
String line;
Scanner sc;
String word;
try  {
    input = new BufferedReader(new FileReader(path));
    while (input.ready()) {
        line = input.readLine();
        System.out.println("Current Line: " + line);
        sc  = new Scanner(line);
        sc.useDelimiter("\\W\\s^\'");
        //...
    }
}
//...  

【问题讨论】:

  • String line = sc.nextLine(); String[] words = line.split(" ");
  • @run 还有标点符号呢?
  • 是的,我的代码与此类似。
  • @Qwe 你会得到所有的单词,包括words 数组中的标点符号,例如:it's great 你会得到it'sgreat 单词(在单词数组中),或者你想要 3像itsgreat 这样的词。你能帮我澄清一下吗

标签: java regex delimiter


【解决方案1】:

我猜你的意思是?

sc.useDelimiter("\\W\\s^\'");

我会用

sc.useDelimiter("[^\\w']+");

String line= "Hello, world!\n 'Computer\n \n Science'\n Hell\n";
System.out.println(Arrays.toString(line.split("[^\\w']+")));

打印

[Hello, world, 'Computer, Science', Hell]

String line= "Hello, world!\n 'Computer\n \n Science'\n Hell\n";
Scanner scan = new Scanner(line);
scan.useDelimiter("[^\\w']+");
while(scan.hasNext())
    System.out.print("|"+scan.next());
System.out.println("|");

打印

|Hello|world|'Computer|Science'|Hell|

【讨论】:

  • 我以前试过这个,但出于某种奇怪的原因,它似乎确实可以识别换行符。例如,如果我的输入是这样的:“Hello, world!\n Computer\n \n Science\n Hell\n”
  • 这很奇怪。我添加了一个示例。
  • 谢谢彼得!!您的解决方案确实有效!我只是发现我在其他地方犯了错误!
  • 另外,我想知道是否要在分隔符中再添加一个条件,即如果仅在其后跟非单词字符,则句点被视为分隔符,我是否要这样写: scan.useDelimiter("[^\\w']+[.\\W]");?
【解决方案2】:

你也可以像这样使用 Tokenizer:

StringTokenizer st1 = new StringTokenizer("a|b|c");

while(st1.hasMoreTokens())
  System.out.println(st1.nextToken());

希望对您的情况有所帮助。

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多