【问题标题】:How to include white spaces in next() without using nextLine() in Javajava - 如何在不使用nextLine()的情况下在next()中包含空格
【发布时间】:2015-04-06 23:25:45
【问题描述】:

我试图让用户输入一个字符串,它可以包含空格或不包含空格。因此,我正在使用 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

【问题讨论】:

  • 不确定您是否会以最简单的方式解决此问题。你能发布一个你正在尝试解析的文件以及你想要保留的文件的样本吗?
  • 我很确定我正在努力做到这一点,但我使用的是我知道的代码,而且我还是个初学者。这是一个包含多行的文本文件,每行包含 IATA 代码、城市和国家,正如我在上面提到的。每条线路都是相同的,但不同的代码,城市..等。我正在尝试编写一个软件,提示用户输入机场名称(城市),程序将搜索文档并打印出 IATA 代码。我已经完成了这个程序。
  • 附言(有点)通过拆分输入字符串,然后添加 if(string contains a space) 然后将第一部分分配给字符串然后我在条件下使用该字符串进行比较来解决我的问题只有第一个词,它们都是独一无二的,所以我几乎只有一个结果。这就是我解决它的方法,我很确定这不是最佳解决方案,但是嘿它对我有用:D 无论如何感谢您的时间。

标签: java java.util.scanner


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    查看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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-04
      • 2016-09-23
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 2014-06-11
      • 2021-09-14
      • 2017-09-27
      相关资源
      最近更新 更多