如何从字符串中解析此信息?

时间:2015-04-01 16:26:39

标签: string parsing java.util.scanner

country     residents   area      capital
Andorra     71201       468       Andorra la Vella
Italien     58133509    301230    Rom
San Marino  29251       61        San Marino

我需要将信息(资本,居民,地区,资本)存储在不同的变量中。我该如何解析这个?请注意,有时名称中会有空格。

我尝试过读取每个令牌(scanner.inxt()),当大写或国家/地区名称中有空格时,这会失败。

我已经尝试过读取每一行然后解析它但我无法找到解决所有内容的方法,因为名称中有一些空格。 (我使用了indexOf()和substring())

这是较大档案的一部分,但整个地区的居民或地区都没有空格。

我的尝试:

while(scanner.hasNext()){

   String info = scanner.nextLine();
   //parse string
   int nameindex = info.indexOf(" ");
   System.out.println(info.substring(0,nameindex));
   int resindex = info.indexOf(" ", nameindex);
}

1 个答案:

答案 0 :(得分:1)

我希望你的问题标题有多行字符串。那么为什么不简单地使用正则表达式来表示整个内容。鉴于字符串存储在变量data

data.split("[ ]{2,}")

这将给出整个数据数组。因此,当你必须解析它时,你可以一次只做一个循环4个元素

(编辑)

或者您可以简单地使用此功能...希望这对您来说更容易。

List<Map<String, String>> parse(String data){
    List<Map<String, String>> dataList = new ArrayList<Map<String, String>>();
    String[] lines = data.split("\n");  
    String[] keys = lines[0].split("[ ]{2,}");
    for (int i = 1; i < lines.length; i++) {
        String row[] = lines[i].split("[ ]{2,}");
        Map<String, String> rowMap = new HashMap<String, String>();
        for (int j = 0; j < row.length; j++) {
            rowMap.put(keys[j], row[j]);
        }
        dataList.add(rowMap);
    }
    return dataList;
}