扫描仪不读取整个句子 - 扫描仪类的next()和nextLine()之间的差异

Bon*_*t09 21 java java.util.scanner

我正在编写一个程序,允许用户输入他的数据然后输出它.它的3/4是正确的但是当它到达输出地址时它只打印一个字,只能说'Archbishop'来自'Archbishop Street'.我该如何解决?

import java.util.*;

class MyStudentDetails{
    public static void main (String args[]){
        Scanner s = new Scanner(System.in);
        System.out.println("Enter Your Name: ");
        String name = s.next();
        System.out.println("Enter Your Age: ");
        int age = s.nextInt();
        System.out.println("Enter Your E-mail: ");
        String email = s.next();
        System.out.println("Enter Your Address: ");
        String address = s.next();

        System.out.println("Name: "+name);
        System.out.println("Age: "+age);
        System.out.println("E-mail: "+email);
        System.out.println("Address: "+address);
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 33

这种方法是有效的,但我不知道如何,任何人都可以解释,它是如何工作的..

String s = sc.next();
s += sc.nextLine();
Run Code Online (Sandbox Code Playgroud)

  • 因为方法`nextLine()`在游标当前位置之后从当前当前行读取下一个符号.例如,如果您的输入包含2行"1"和"Hello World".像这样的来源:`int x = sc.nextInt(); String s = sc.nextLine()`.在这种情况下,在`nextInt()`之后,光标停留在符号"1"之后,这是该行的结尾,而`nextLine()`什么都不读.但是,当您在编写顶部时编写代码时,首先,光标移动到下一行并读取单词"Hello".然后光标停留在单词"Hello"之后.命令`sc.nextLine()`读取下一个符号 - "World". (7认同)
  • 第一次看到一个答案,这本身就有一个问题得到了许多赞成 (3认同)

Nom*_*mad 14

以这种方式初始化扫描仪,以便使用换行符分隔输入.

Scanner sc = new Scanner(System.in).useDelimiter("\\n");
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅JavaDoc

使用sc.next()获取String中的整行


Ant*_*ney 12

我会Scanner#nextLine反对next你的address属性使用.

此方法返回当前行的其余部分,不包括末尾的任何行分隔符.

由于这将返回整行,由行分隔符分隔,它将允许用户输入任何地址而不受任何约束.


Rag*_*ram 5

Scanner的默认分隔符是空格.检查javadoc以了解如何更改此设置.


Mic*_*rdt 5

不是直接使用System.inand System.out,而是使用Console该类 - 它允许您在一次调用中显示提示并阅读整行输入(从而解决您的问题):

String address = System.console().readLine("Enter your Address: ");
Run Code Online (Sandbox Code Playgroud)


小智 5

String s="Hi";
String s1="";

//For Reading Line by hasNext() of scanner 
 while(scan.hasNext()){
  s1 = scan.nextLine();
 }
System.out.println(s+s1);

/*This Worked Fine for me for reading Entire Line using Scanner*/
Run Code Online (Sandbox Code Playgroud)


小智 5

import java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.next();
        s += scan.nextLine();
        System.out.println("String: " + s);

    }
}
Run Code Online (Sandbox Code Playgroud)