gpt4 book ai didi

java - 如何用Java中的Scanner类解决行尾读取问题

转载 作者:行者123 更新时间:2023-12-01 16:05:50 28 4
gpt4 key购买 nike

我不是一位经验丰富的 Java 程序员,我正在尝试将一些文本写入文件,然后使用 Scanner 读取它。我知道有很多方法可以做到这一点,但我想将记录写入带有分隔符的文件,然后读取这些片段。

这个问题很小。当我查看输出时,没有看到一些打印(如下所示)。我的意思是输出中仅写有“扫描仪”的粗线。如果有人能回答为什么没有看到“String:”,我将不胜感激。 (请回答我的问题)

我不明白这是一个简单的打印问题还是“\r\n”的行结束问题。

这是代码:


import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;<p></p>

<pre><code>public class Tmp {
public static void main(String args[]) throws IOException {
int i;
boolean b;
String str;

FileWriter fout = new FileWriter("test.txt");
fout.write("Testing|10|true|two|false\r\n");
fout.write("Scanner|12|one|true|");
fout.close();

FileReader fin = new FileReader("Test.txt");

Scanner src = new Scanner(fin).useDelimiter("[|\\*]");

while (src.hasNext()) {
if (src.hasNextInt()) {
i = src.nextInt();
System.out.println("int: " + i);
} else if (src.hasNextBoolean()) {
b = src.nextBoolean();
System.out.println("boolean: " + b);
} else {
str = src.next();
System.out.println("String: " + str);
}
}

fin.close();
}
}
</code></pre>

<p></p>

这是输出:


String: Testing
int: 10
boolean: true
String: two
String: false
<strong>Scanner</strong>
int: 12
String: one
boolean: true

最佳答案

您没有正确设置分隔符; [|\\*] 是一个由 2 个字符组成的字符类,|*

    String s = "hello|world*foo*bar\r\nEUREKA!";
System.out.println(s);
// prints:
// hello|world*foo*bar
// EUREKA!

Scanner sc;

sc = new Scanner(s).useDelimiter("[|\\*]");
while (sc.hasNext()) {
System.out.print("[" + sc.next() + "]");
}
// prints:
// [hello][world][foo][bar
// EUREKA!]

System.out.println();

sc = new Scanner(s).useDelimiter("\r?\n|\r|\\|");
while (sc.hasNext()) {
System.out.print("[" + sc.next() + "]");
}
// prints:
// [hello][world*foo*bar][EUREKA!]

您似乎发现 "[|\\n]" “有效”,但这实际上在某些标记的末尾留下了尾随 \r

巧合的是,你应该查一下PrintWriter ;它具有使用系统属性line.separatorprintln 方法。它基本上就是 System.out 的本质。

PrintWriter fout = new PrintWriter(new File("test.txt"));
fout.println("Testing|10|true|two|false");

关于java - 如何用Java中的Scanner类解决行尾读取问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2649216/

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