字符串不能处理空格?

时间:2018-12-01 13:40:22

标签: java java.util.scanner spaces

所以我正在用Java做一些练习,但我遇到了一个字符串问题,该字符串似乎无法很好地处理空格。

当我输入例如“乔·史密斯”的名字时,“史密斯”部分以变量程序结尾。如果我在变量程序中写“ Economics major”,整个程序将崩溃。 (可能是因为points是一个int变量)

似乎空格使它崩溃或表现出怪异的行为。在这种情况下,空格应如何工作?

import java.util.Scanner;




class Student {
String name;
String program;
int points; 

Scanner userScan = new Scanner(System.in);


String setName() {
    System.out.printf("Please enter name: ");
    String scan = userScan.next();
    name = scan;
    return name;
}

String setProgram() {
    System.out.printf("Please enter program: ");
    String scan = userScan.next();
    program = scan;
    return program;
}

int setPoints() {
    System.out.printf("Please enter points: ");
    int scan = userScan.nextInt();
    points = scan;
    return points;
}

void printStudent() {
    System.out.printf("Name: " + name + "\nProgram:" + program + "\nPoints" + points);    
}
}



public class Kap_2_Ovning_2Student {


public static void main(String[] args) {


   Student student1 = new Student();
   Student student2 = new Student();

   student1.setName();
   student1.setProgram();
   student1.setPoints();
   student1.printStudent();

2 个答案:

答案 0 :(得分:3)

您使用的new Scanner(System.in)默认情况下使用空格作为令牌定界符。每次调用Scanner.next()时,它只会读取数据,直到遇到定界符为止。来自Scanner.next() method javadoc

  

查找并返回此扫描仪的下一个完整令牌。完整的标记在其前面,然后是与定界符模式匹配的输入。即使先前调用hasNext()返回true,此方法也可能在等待输入扫描时阻塞。

如果要在令牌中留出空格,则必须更改定界符,例如使用换行符进行拆分,请使用:

new Scanner(input).useDelimiter("\\n*");

或使用Scanner.nextLine()

答案 1 :(得分:1)

这里是Scanner class的JavaDoc,请检查一下以大致了解其工作原理。

我认为这里的主要问题是您想通过调用next()方法来读取整行,例如,可以使用nextLine()方法来代替它。