我不确定是否可以完成,但我想将一个非常简单的JSON文件解析为一个字符串数组。
示例文件:
["String1", "String2", "oneMoreString"]
到目前为止,我认为我会使用带有模式的Scanner来获取输出,但未能这样做。
ArrayList<String> strings = new ArrayList<String>();
File f = new File("src/sample.txt");
String pattern = "\\s*[\"\"]\\s*";
try {
InputStream is = new FileInputStream(f);
Scanner s = new Scanner(is);
s.useDelimiter(pattern);
while (s.hasNext()){
strings.add(s.next());
}
s.close();
is.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
因为模式显然是错误的,因为它认为“,”因为它适合,但我希望它不会被包括......:S
我也接受可以解析的任何其他方式的建议。也许是JSON解析器?但由于文件很简单,我认为没必要。
答案 0 :(得分:3)
最好使用像Jackson Mapper这样的JSON解析器来解析JSON字符串。
但是如果你有一个简单的String,你可以快速使用一个样本正则表达式。
试试这个:
String str = "[\"String1\", \"String2\", \"oneMoreString\"]";
Pattern pattern = Pattern.compile("\"(.+?)\"");
Matcher matcher = pattern.matcher(str);
List<String> list = new ArrayList<String>();
while (matcher.find()) {
// System.out.println(matcher.group(1));.
list.add(matcher.group(1));
}
答案 1 :(得分:3)
看到你的杰克逊在你的课程中,只需:
ObjectMapper mapper = new ObjectMapper();
String[] array = mapper.readValue("[\"String1\", \"String2\", \"oneMoreString\"]", String[].class);
System.out.println(Arrays.toString(array));
将打印:
[String1, String2, oneMoreString]
答案 2 :(得分:1)
//split by ,
String strings[] = s.split(",");
//remove [ from first string
strings[0] = strings[0].substring(1);
//remove ] from last string
String last = strings[strings.length - 1];
strings[strings.length - 1] = last.substring(0, last.length() - 1);
答案 3 :(得分:-1)
不是像上面那样解析它,而是可以使用任何可用的Java json解析器