打印带有前导空格的扫描仪输入的字符串

时间:2017-08-20 08:18:23

标签: java string io java.util.scanner

我已经扫描了一个int类型的输入,然后我尝试第二次输入String类型,在开头有空格,并且在打印输入时,我希望第二个输入打印为它是(带有空格)。

class Input{
    public static void main (String[] args) throws java.lang.Exception{

        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();


        String s=sc.next();
        s=s+sc.nextLine();

        System.out.println(n);
        System.out.println(s);
    }
}

输入:

4
      hello world.

预期产出:

4
      hello world.

实际输出:

4
hello world.

4 个答案:

答案 0 :(得分:4)

Scanner.next()使用默认分隔符,它将捕获任何空格序列。请改用Scanner.nextLine()

int n = sc.nextInt();
sc.nextLine();  // consume only the newline
String s = sc.nextLine();

Ideone Demo

答案 1 :(得分:1)

默认分隔符是一个或多个空格:

private static Pattern WHITESPACE_PATTERN = Pattern.compile(
                                                "\\p{javaWhitespace}+");

因此sc.next()生成"hello"sc.nextLine()读取当前行的其余部分会产生"world"

您可以将分隔线字符设置为第二个输入的分隔符,然后删除

s = s + sc.nextLine();不再需要:

...
sc.useDelimiter(System.lineSeparator());
String s = sc.next();

答案 2 :(得分:1)

使用sc.nextLine()代替next()。 因为对于nextLine(),要读取的标记是整行,对于next(),要读取的标记是下一个单词。

答案 3 :(得分:-2)

import java.util.*;
class Input{
    public static void main(String[] main){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        sc=new Scanner(System.in);
        String s=sc.nextLine();
        System.out.println(n);
        System.out.println(s);
    }
}