gpt4 book ai didi

当 1024 个字符是定界符时,Java Scanner 类在标记化中失败

转载 作者:搜寻专家 更新时间:2023-11-01 03:47:35 26 4
gpt4 key购买 nike

我发现 java.util.Scanner 类有一个奇怪的行为。我需要将一个字符串变量拆分为一组由“;”分隔的标记。

如果我考虑字符串 "a[*1022]"+ ";[*n]"我期望有 n 个 token 。但是,如果 n=3 Scanner 类失败:它“看到”只有 2 个标记而不是 3 个。我认为这与 Scanner 类的内部字符缓冲区大小有关。

a[x1022];      -> 1 token: correct

a[x1022];; -> 2 token: correct

a[x1022];;; -> 2 token: wrong (I expect 3 tokens)

a[x1022];;;; -> 4 token: correct

我附上一个简单的例子:

import java.util.Scanner;

public static void main(String[] args) {

// generate test string: (1022x "a") + (3x ";")
String testLine = "";
for (int i = 0; i < 1022; i++) {
testLine = testLine + "a";
}
testLine = testLine + ";;;";

// set up the Scanner variable
String delimeter = ";";
Scanner lineScanner = new Scanner(testLine);
lineScanner.useDelimiter(delimeter);
int p = 0;

// tokenization
while (lineScanner.hasNext()){
p++;
String currentToken = lineScanner.next();
System.out.println("token" + p + ": '" + currentToken + "'");
}
lineScanner.close();
}

我想跳过“不正确”的行为,你能帮我吗?谢谢

最佳答案

我的建议是向 Oracle 报告错误,然后通过使用 BufferedReader 读取您的 InputStream(您还需要 InputStreamReader 类)来解决它。 Scanner 的作用并不神奇,在这种情况下直接使用 BufferedReader 只需要比您已经使用的代码稍微多一点的代码。

关于当 1024 个字符是定界符时,Java Scanner 类在标记化中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40935363/

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