gpt4 book ai didi

Java Scanner - 除非存在引号,否则用空格分隔?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:41 24 4
gpt4 key购买 nike

我正在尝试使用 Java 中的 Scanner 类从配置文件中获取数据。文件的元素由空格分隔。但是,如果短语或元素应被解释为字符串文字(包括空格),则双引号或单引号会放在元素周围。这会生成如下所示的文件:

> R 120 Something AWord

> P 160 SomethingElse "A string literal"

当使用 Java Scanner 类时,默认情况下它仅以空格分隔。 Scanner 类具有 useDelimiter() 函数,该函数采用正则表达式为文本指定不同的分隔符。但是,我不擅长正则表达式,所以我不确定该怎么做。

除非周围有引号,否则如何用空格分隔?

最佳答案

您可以使用 scanner.findInLine(pattern)方法来指定您要防止字符串文字被拆分。您只需要一个正则表达式来匹配无引号标记或引号中的标记。这个可能有用:

"[^\"\\s]+|\"(\\\\.|[^\\\\\"])*\""

(该正则表达式非常复杂,因为它处理字符串文字内的转义。)

例子:

String rx = "[^\"\\s]+|\"(\\\\.|[^\\\\\"])*\"";
Scanner scanner = new Scanner("P 160 SomethingElse \"A string literal\" end");
System.out.println(scanner.findInLine(rx)); // => P
System.out.println(scanner.findInLine(rx)); // => 160
System.out.println(scanner.findInLine(rx)); // => SomethingElse
System.out.println(scanner.findInLine(rx)); // => "A string literal"
System.out.println(scanner.findInLine(rx)); // => end

findInLine 方法,顾名思义,只在当前行内起作用。如果你想搜索整个输入,你可以使用 findWithinHorizon反而。您可以将 0 作为地平线传入,以告诉它使用无限地平线:

scanner.findWithinHorizon(rx, 0);

关于Java Scanner - 除非存在引号,否则用空格分隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com