gpt4 book ai didi

如果第一个标记为空,Java Scanner 将忽略它

转载 作者:行者123 更新时间:2023-12-04 17:47:00 33 4
gpt4 key购买 nike

我正在尝试使用扫描器读取字符串标记的 InputStream。每个标记都以逗号 , 结尾。空字符串 "" 也是一个有效的标记。在那种情况下,整个标记只是结束它的逗号。

InputStream 是从另一个进程缓慢读取的,任何 token 都应在完全读取后立即处理。因此,将整个 InputStream 读取为 String 是不可能的。

示例输入可能如下所示:

ab,,cde,fg,

如果我将 Scanner 的分隔符设置为逗号,它似乎可以很好地处理这项工作。

InputStream input = slowlyArrivingStreamWithValues("ab,,cde,fg,");

Scanner scan = new Scanner(input);
scan.useDelimiter(Pattern.quote(","));
while (scan.hasNext()) {
System.out.println(scan.next());
}

输出:

ab

cde
fg

但是,当流以空标记开始时会出现问题。出于某种原因,如果第一个标记为空,扫描器将忽略它。

/* begins with empty token */
InputStream input = slowlyArrivingStreamWithValues(",ab,,cde,fg,");
...

输出:

ab

cde
fg

为什么 Scanner 会忽略第一个标记?如何包含它?

最佳答案

尝试使用 lookbehind 作为模式:

(?<=,)

然后用您匹配的每个标记将逗号替换为空字符串。考虑以下代码:

String input = ",ab,,cde,fg,";
Scanner scan = new Scanner(input);
scan.useDelimiter("(?<=,)");
while (scan.hasNext()) {
System.out.println(scan.next().replaceAll(",", ""));
}

输出如下:

(empty line)
ab

cde
fg

Demo

关于如果第一个标记为空,Java Scanner 将忽略它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48055637/

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