字符串不能处理空格?

String can´t handle spaces?

所以我在 Java 中做了一些练习,我遇到了一个字符串问题,它似乎不能很好地处理空格。

当我输入名称时,例如 "Joe Smith","Smith" 部分将在变量程序中结束。如果我在变量程序中写 "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();

您正在使用 new Scanner(System.in),它默认使用空格作为标记分隔符。每次调用 Scanner.next() 时,它只会读取数据,直到遇到定界符。来自 Scanner.next() method javadoc:

Finds and returns the next complete token from this scanner. A complete token is preceded and followed by input that matches the delimiter pattern. This method may block while waiting for input to scan, even if a previous invocation of hasNext() returned true.

如果你想在你的标记中允许空格,你必须更改分隔符,例如在换行符上拆分使用:

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

或使用Scanner.nextLine().

这是 Scanner class 的 JavaDoc,请您检查一下,以便大致了解它是如何工作的。

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