如何用Java中的Scanner类解决行尾读取

如何用Java中的Scanner类解决行尾读取,java,java.util.scanner,Java,Java.util.scanner,我不是一个有经验的Java程序员,我正在尝试将一些文本写入文件,然后用扫描仪读取。我知道有很多方法可以做到这一点,但我想用分隔符将记录写入文件,然后读取片段 问题很小。当我查看输出时,没有看到一些打印(如下所示)。我指的是输出中仅写入“扫描仪””的粗体行。如果有人能回答为什么没有看到“字符串:”,我将不胜感激。(请回答我的问题) 我无法理解这是一个简单的打印问题还是带有“\r\n”的行结束问题 代码如下: 以下是输出: FileWriter fout = new FileWriter("te

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

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

我无法理解这是一个简单的打印问题还是带有“\r\n”的行结束问题

代码如下:

以下是输出:
FileWriter fout = new FileWriter("test.txt");
fout.write("Testing|10|true|two|false\n");
fout.write("Scanner|12|one|true|");
fout.close();
FileReader fin = new FileReader("test.txt");
Scanner src = new Scanner(fin).useDelimiter("[|\n]");

字符串:测试
内部:10
布尔值:真
字符串:两个
字符串:false
扫描仪
内部:12
字符串:1
布尔值:真

问题在于您正在写出字符串“String:”,然后写出控制字符或回车符,然后写出内容

以下版本对您来说应该更好一些:

  } else {
    str = src.next().trim();
    str = str.replace('\n', '_');
    str = str.replace('\r', '_');
    System.out.println("String: " + str);
  }
要真正了解我使用的内容,\r,您应该更改原始程序,使打印代码如下所示:

    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!]      
您应该看到输出:

字符串:false\uuuu扫描器


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

PrintWriter fout = new PrintWriter(new File("test.txt"));
fout.println("Testing|10|true|two|false");
您似乎已经发现
“[| \\n]”
“有效”,但这实际上会在某些令牌的末尾留下一个尾随的
\r

巧合的是,你应该向上看;它有
println
方法,使用系统属性
line.separator
。这基本上是什么
System.out
is-a


谢谢你,当我替换为:Scanner src=new Scanner(fin).useDelimiter(“[|\\n]”);问题解决了,你的回答对我帮助很大,再次感谢..没问题..我从来没有听说过Scanner类,现在我可以编写更简洁的代码:)
    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!]      
PrintWriter fout = new PrintWriter(new File("test.txt"));
fout.println("Testing|10|true|two|false");