如何从字符串中解析这些信息?
How to parse this information from a string?
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);
}
我希望你的问题标题有一个多行字符串。那么为什么不简单地对整个内容使用正则表达式。鉴于字符串存储在变量 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;
}
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);
}
我希望你的问题标题有一个多行字符串。那么为什么不简单地对整个内容使用正则表达式。鉴于字符串存储在变量 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;
}