【问题标题】:How to parse this information from a string?如何从字符串中解析这些信息?
【发布时间】:2015-04-01 16:26:38
【问题描述】:
country     residents   area      capital
Andorra     71201       468       Andorra la Vella
Italien     58133509    301230    Rom
San Marino  29251       61        San Marino

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

我已尝试读取每个令牌 (scanner.next()),但当首都或国家/地区名称中有空格时会失败。

我尝试读取每一行然后对其进行解析,但我无法找到正确解析所有内容的方法,因为名称中有时存在空格。 (我使用 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);
}

【问题讨论】:

  • 如果nameindex后面的字符串是Numeric,则将其作为下一个字段读取,否则将读取的字符串附加到上一个字段中,中间有空格。

标签: string parsing java.util.scanner


【解决方案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;
}

【讨论】:

  • 这是否允许我获取国家/地区的名称,即使它包含空格?例如“圣马力诺”?
  • 我为您和未来的读者方便地编辑了答案。是的,即使有空格也会读取。但是空间应该连续不止一个..试试看这是否有效
  • 谢谢,但我不明白如何从列表中获取具有正确信息的字符串?
  • 当存在超过 2 个空格时,它会拆分字符串。我使用正则表达式来做到这一点。如果这可行,那么您可以通过单击我的答案旁边的勾号来选择它作为此问题的正确答案。
  • 我明白了。谢谢你的帮助,伙计!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多