了解Java中的扫描程序

时间:2015-11-26 06:51:38

标签: java java.util.scanner

我试图理解java中的Scanner类,在一些例子中尝试我对下面两个程序的模糊性,在逻辑上我没有看到任何差异,但输出告诉我有一些我缺少的东西。请帮帮我

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="sendmsg">
  <textarea id="sendtext" value="">
  </textarea>
  <div class="clearBoth"></div>
</div>

以上程序正在打印输出

public static void main(String args[]) {
        Scanner scanner1=new Scanner(System.in);
        String s=scanner1.nextLine();
        scanner1.close();

        // create a new scanner with the specified String Object
        Scanner scanner = new Scanner(s);

       // print the next line
       System.out.println("" + scanner.nextLine());

       // check if there is a next line again
       System.out.println("" + scanner.hasNextLine());

       // print the next line
       System.out.println("" + scanner.nextLine());

       // check if there is a next line again
       System.out.println("" + scanner.hasNextLine());

       // close the scanner
       scanner.close();
       }

虽然下面的程序我没有看到与上面的任何差异显示不同的输出

Hello World! \n 3+3.0=6
Hello World! \n 3+3.0=6
false

以上程序的输出是

public static void main(String[] args) {

        String s="Hello World! \n 3 + 3.0 = 6";
        // create a new scanner with the specified String Object
        Scanner scanner = new Scanner(s);

       // print the next line
       System.out.println("" + scanner.nextLine());

       // check if there is a next line again
       System.out.println("" + scanner.hasNextLine());

       // print the next line
       System.out.println("" + scanner.nextLine());

       // check if there is a next line again
       System.out.println("" + scanner.hasNextLine());

       // close the scanner
       scanner.close();
       }

2 个答案:

答案 0 :(得分:2)

如果在文件中写入\ n,则无法使用nextLine()[使用两个反斜杠,它将为您提供 java.util.NoSuchElementException ],因为没有\ n(结束(但是)有\ n(两个反斜杠)。 要读取文件并将文本中的\ n替换为实际的EOL,您可以将sc.useDelimiter(&#34; \\ n&#34;)用于新行,但它可能会破坏扫描程序的功能。一些方法。

Scanner s = new Scanner("Hello World! \\n 3 + 3.0 = 6");
s.useDelimiter("\\\\n");
System.out.println(s.next());
System.out.println(s.next()); 

将为您提供类似

的输出
Hello World!
3 + 3.0 = 6

答案 1 :(得分:0)

我假设您在第一个代码段中输入Hello World! \n 3+3.0=6到标准输入。 &#34; \ n&#34;在这种情况下,它不被解析为新行(它被解析为字符&#39; \&#39;后跟字符&#39; n&#39;)。键入&#34; Hello World后,您必须按下Enter按钮! &#34;为了让扫描仪将输入分成两行。

另一方面,当扫描仪从字符串中获取输入时,&#34; \ n&#34;被视为换行符。

哦,看来你的第一个片段中有一个拼写错误。我假设您使用的扫描程序从System.in获取其输入(您可能将两个代码段的代码混合在一起)。