2015-04-01 51 views
0
country  residents area  capital 
Andorra  71201  468  Andorra la Vella 
Italien  58133509 3Rom 
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); 
} 
+0

如果nameindex ISNUMERIC后,下面的字符串,然后把它读作下一个字段,用空格否则追加读字符串中前场之间。 – KrishPrabakar 2015-04-01 16:33:51

回答

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; 
} 
+0

这是否允许我获取国家的名称,即使它包含空格?例如“圣马力诺”? – Lightvvind 2015-04-01 16:56:40

+0

我为你和未来的读者编辑答案方便。是的即使有空格也会读取。但空间应该是连续多于一个..试试看看它是否可行 – 2015-04-01 17:11:39

+0

谢谢,但我不明白我是如何从列表中获得正确信息的字符串? – Lightvvind 2015-04-01 17:21:40