当1024字符是分隔符时,Java Scanner类在标记化时失败
发布时间:2020-12-15 02:17:42 所属栏目:Java 来源:网络整理
导读:我发现了一个 java.util.Scanner类的奇怪行为. 我需要将一个String变量拆分为一组由“;”分隔的标记. 如果我考虑一个字符串“a [* 1022]”“; [* n]”我期待一个n号令牌. 但是如果n = 3,则Scanner类失败:它“看到”只有2个令牌而不是3个.我认为它与Scanner
我发现了一个
java.util.Scanner类的奇怪行为.
我需要将一个String变量拆分为一组由“;”分隔的标记. 如果我考虑一个字符串“a [* 1022]”“; [* n]”我期待一个n号令牌. 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只需要比你已经使用的代码稍多的代码.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |