【问题标题】:String can´t handle spaces?字符串不能处理空格?
【发布时间】:2019-05-03 10:11:48
【问题描述】:

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

当我输入一个名字时,例如“Joe Smith”,“Smith”部分最终出现在变量程序中。如果我在变量程序中写“经济学专业”,整个程序就会崩溃。 (可能是因为 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();

【问题讨论】:

标签: java java.util.scanner spaces


【解决方案1】:

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

从此扫描器中查找并返回下一个完整的令牌。一个完整的标记前后是匹配分隔符模式的输入。此方法在等待输入扫描时可能会阻塞,即使之前调用 hasNext() 返回 true。

如果您想在标记中允许空格,则必须更改分隔符,例如在换行符处使用:

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

或使用Scanner.nextLine()

【讨论】:

    【解决方案2】:

    这是Scannerclass 的JavaDoc,请您检查一下,以大致了解它的工作原理。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 2013-10-24
      • 2021-11-30
      • 1970-01-01
      • 2021-05-23
      • 2021-03-02
      相关资源
      最近更新 更多