【问题标题】:Part of string before a colon and then the part after the colon using a scanner冒号前的部分字符串,然后使用扫描仪冒号后的部分
【发布时间】:2016-07-31 15:58:34
【问题描述】:

正如标题所说,是否可以使用扫描仪读取冒号前的部分字符串,然后读取冒号后的其余部分?

如果你有一个字符串:

"AA:BigHouseOnTheBeach"

我是否可以将第一部分 "AA" 存储在单独的字符串中,将 "BigHouseOnTheBeach" 存储在第二个单独的字符串中?

这是我的代码:

public NumberPlates() {
    // opg 2a) initialiser districtMap
    districtMap = new HashMap<String, String>();
    readFile();
}

public void readFile() {
    file = new File("src/opg2_numberplates/Nummerplader.txt");

    try {
        Scanner reader = new Scanner(file);

        if (reader.hasNext()) {
            kb = reader.next();
            pk = reader.next();
            districtMap.put(kb, pk);
        }

    } catch (NullPointerException ex) {
        System.out.println("Null pointer");

    } catch (FileNotFoundException ex) {
        System.out.println("File not found");
    }
}

目前,它会将"AA:BigHouseOnTheBeach" 和"AB:SmallHouseOnTheBeach" 作为键和值放入我的地图中。我想将"AA" 作为键,"BigHouseOnTheBeach" 作为值。

【问题讨论】:

  • Scanner 如何决定使用什么分隔符? javadoc 是怎么说的?
  • 你在暗示分隔符吗?
  • 没错。只需设置正确的分隔符。

标签: java regex string hashmap java.util.scanner


【解决方案1】:

你可以使用Scanner的setDelimiter(String regex)方法:

Scanner scan = new Scanner("Hello: There!");
scan.useDelimiter(":");
System.out.println(scan.next());
System.out.println(scan.next());  

输出:

“你好”
“ 那里!”

如果您不希望第二个字符串包含":" 之后的空格,请更改为:

scan.useDelimiter(":\\s*");

【讨论】:

  • 我试过这个并且它有效,但是它现在输出“AA”“BigHouseOnTheBeach”“AB” - 我可以关闭它只抓取“:”之前和之后的单词吗?
  • "AA:BigHouse..." 与 "AB:SmallHouse..." 的区别是什么?他们在不同的线路上吗?
  • 所以你可以用":\\s*|\n"替换regex,这告诉Scanner跳过":"或"\n"
【解决方案2】:

您可以使用字符串拆分方法根据分隔符拆分字符串。以下是代码。

if (reader.hasNext()) {
        String input = reader.next();
        String[] parts = input.split(":");
        kb = parts[0];
        pk = parts[1];
        districtMap.put(kb, pk);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2022-01-17
    • 2020-11-18
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 2015-08-06
    相关资源
    最近更新 更多