当前位置: 首页 > 面试题库 >

如何使扫描仪正确读取转义字符?

琴元凯
2023-03-14
问题内容

我正在从一个文件中读取,该文件在一行上读取所有内容:

Hello World!\nI've been trying to get this to work for a while now.\nFrustrating.\n

然后,我的扫描程序会从文件中读取该文件并将其放入字符串中:

Scanner input = new Scanner(new File(fileName));
String str = input.nextLine();
System.out.print(str);

现在,我希望输出为:

Hello World!
I've been trying to get this work for a while now.
Frustrating.

但是相反,我得到了与输入完全相同的东西。也就是说,每个\ n都包含在输出中,并且所有内容都在一行中而不是单独的行中。

我以为Scanner能够正确读取转义字符,但它会像\\ n一样将其复制到String上。


问题答案:

如果\n写的是文件,则不能使用,nextLine()因为没有\n(行尾),而是\\n(两个字符)。

而是尝试使用定界符:

    Scanner sc = new Scanner(new File("/home/alain/Bureau/ttt.txt"));
    sc.useDelimiter("\\\\n");
    while(sc.hasNext()){
        System.out.println(sc.next());
    }

输出:

你好,世界!

我一直在尝试使它工作一段时间。

令人沮丧

编辑:

如果您想读取文件并将\n文本中的替换为实际EOL。您可以简单地使用:

Scanner sc = new Scanner(new File("/home/alain/Bureau/ttt.txt"));

//loop over real EOL
while(sc.hasNextLine()){

     //Replace the `\n` in the line with real EOL.
     System.out.println(sc.nextLine().replace("\\n", System.getProperty("line.separator")));
}


 类似资料:
  • 我正在为课堂做作业。由于某种原因,程序完全跳过了用户应该键入变量的部分。我想不出任何理由为什么它会以这种方式运行,因为我的其余代码位于部分之后(它要求诸如和类型之类的东西)工作正常且有序。

  • 问题内容: 编辑 以便进一步阅读:问题是我的输入文件已损坏。 我不明白我在做什么错: 我正在使用此代码: 哪个工作正常。现在,由于某种原因,我想换一个扫描仪。我的代码变成: 这次,我们从不输入while,因为r.hasNextLine()始终返回“ false”。关于我在做什么错的任何想法吗? 我精确地说,没有其他更改,文件仍然相同。 编辑 :我还精确地我尝试了另一个文件,并得到相同的结果,这意味

  • 问题内容: 我正在玩Scanner类,以进行学习,并且我使用它来读取非常大的文件(大约60.000行,大约不使用Reader类),并且在大约400行后停止读取。我是否必须在Scanner的构造函数中使用Bufferedreader还是问题?我想知道为什么会这样。谢谢。我的代码是输出所有行的常用代码。 问题答案: 此问题通常在64位计算机上或文件大小大于1-2 GB的文件中更常见,并且与堆空间无关。

  • 问题内容: 我正在尝试做的是拥有多个具有不同变量的输入。每个变量将是不同方程式的一部分。我正在寻找一种方法来做,我想我有一个主意。我只想知道这是否合法,也许还有更好的方法。 问题答案: 如果每个输入都问相同的问题,则应使用循环和输入数组: 或者如Chip所建议的,您可以从一行中解析输入: 您在正确的轨道上,所做的工作正常。这只是一种更好,更灵活的处理方式。

  • 问题内容: 我的程序中有一个扫描仪,可以读取文件的一部分并将其格式化为HTML。当我读取文件时,我需要知道如何使扫描仪知道它在一行的末尾,然后开始写入下一行。 这是代码的相关部分,让我知道是否遗漏了什么: 我发现了有关,但是我仍然不知道如何确定何时到达终点。 问题答案: 如果只想使用Scanner,则需要创建一个临时字符串,将其实例化到数据网格的nextLine()(因此它仅返回跳过的行),并创建

  • 问题内容: Go扫描程序包中使用技巧来查找空白: 然后: 由于字符值向左移超过31,因此在某些情况下这不是唯一的吗?我的意思是,当某些char与制表符模数32相同时,它将被识别为空格吗? 问题答案: 完全答案: Spec明确表示,对于无符号操作,我们会屏蔽掉高位,因此低位实际上是“环绕”的。 它起作用的原因是: 实际上是完全适合的价值 在运行时对无符号整数进行的运算可以具有任意大的中间值,并且会回