如何在next()中包含空格而不使用Java中的nextLine()

时间:2015-04-06 23:25:45

标签: java java.util.scanner

我试图让用户输入一个字符串,它既可以包含空格也可以不包含空格。所以,我正在使用NextLine();

但是,我正在尝试使用该字符串搜索文本文件,因此我使用next()来存储它与扫描程序一起经过的每个字符串,我尝试使用NextLine()但它会占用整行,我只需要逗号之前的单词。  到目前为止这是我的代码

System.out.print("Cool, now give me your Airport Name: ");

String AirportName = kb.nextLine();
AirportName = AirportName + ",";

while (myFile.hasNextLine()) {
    ATA = myFile.next();
    city = myFile.next();

    country = myFile.next();
    myFile.nextLine();
    // System.out.println(city);

    if (city.equalsIgnoreCase(AirportName)) {
        result++;
        System.out.println("The IATA code for "+AirportName.substring(0, AirportName.length()-1) + " is: " +ATA.substring(0, ATA.length()-1));
        break;
    }
}

当用户输入一个没有空格的单词时,代码会起作用,但是当他们输入两个单词时,就不会满足条件。

文本文件只包含许多机场,其IATA,城市和国家/地区。这是一个示例:

ADL, Adelaide, Australia
IXE, Mangalore, India
BOM, Mumbai, India
PPP, Proserpine Queensland, Australia

2 个答案:

答案 0 :(得分:1)

默认情况下,next()搜索第一个空格作为分隔符。您可以像这样更改此行为:

Scanner s = new Scanner(input);
s.useDelimiter("\\s*,\\s*");

这样,s.next()会将逗号作为输入的分隔符(前面或后跟零个或多个空格)

答案 1 :(得分:0)

查看String#split方法。

以下是一个例子:

String test = "ADL, Adelaide, Australia\n"
            + "IXE, Mangalore, India\n"
            + "BOM, Mumbai, India\n"
            + "PPP, Proserpine Queensland, Australia\n";

Scanner scan = new Scanner(test);
String strings[] = null;

while(scan.hasNextLine()) {
    // ",\\s" matches one comma followed by one white space ", "
    strings = scan.nextLine().split(",\\s");

    for(String tmp: strings) {
        System.out.println(tmp);
    }
}

输出:

ADL
Adelaide
Australia
IXE
Mangalore
India
BOM
Mumbai
India
PPP
Proserpine Queensland
Australia