所以我正在用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();
答案 0 :(得分:3)
您使用的new Scanner(System.in)
默认情况下使用空格作为令牌定界符。每次调用Scanner.next()
时,它只会读取数据,直到遇到定界符为止。来自Scanner.next()
method javadoc:
查找并返回此扫描仪的下一个完整令牌。完整的标记在其前面,然后是与定界符模式匹配的输入。即使先前调用hasNext()返回true,此方法也可能在等待输入扫描时阻塞。
如果要在令牌中留出空格,则必须更改定界符,例如使用换行符进行拆分,请使用:
new Scanner(input).useDelimiter("\\n*");
答案 1 :(得分:1)
这里是Scanner
class的JavaDoc,请检查一下以大致了解其工作原理。
我认为这里的主要问题是您想通过调用next()
方法来读取整行,例如,可以使用nextLine()
方法来代替它。