假设您正在处理以下列格式组织的数据:
[123]="some string" [234]=999999999 [345]="some other string"
在Java中,通过KV组合分割每个的最简单方法是什么,其中K是标记(包含在[ ]
中)。
是否有一个你知道的Utils(Apache或其他?)方法可以让你定义一个如上所示的结构来帮助迭代它,而不必在[ ]
之间和之间手动计算和读取数据?
我们知道什么?
[ ]
=
答案 0 :(得分:4)
使用带有正则表达式Pattern
的{{1}}一次抓取一对
唯一的限制是假设下一个术语从空格开始,后跟"\\[(.*?)\\]=(.*?)( (?=\\[)|$)"
,因此该字符序列可能不会出现在值中。
此代码演示:
[
输出:
public static void main(String[] args) {
String input = "[123]=\"some string\" [234]=999999999 [345]=\"some other string\"";
Pattern pattern = Pattern.compile("\\[(.*?)\\]=(.*?)( (?=\\[)|$)");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String k = matcher.group(1);
String v = matcher.group(2);
System.out.println(k + "-->" + v);
}
}
答案 1 :(得分:1)
听起来像是java.util.Scanner
的工作。
答案 2 :(得分:1)
您可以使用java.util.Properties
来读取数据。毕竟,他们只是key=value
对。
例如:
String input="[123]=\"some string\" [234]=999999999 [345]=\"some other string\"";
input = input.replaceAll("\\s+\\[", System.getProperty("line.separator") + "[");
Reader in = new StringReader(input);
Properties props = new Properties();
props.load(in);
in.close();
要提取数据,请使用:
private static String getValue(String key, Properties props) {
return props.getProperty("[" + key + "]");
}
结果如预期:
System.out.println(getValue("123", props));
> "some string"
System.out.println(getValue("234", props));
> 999999999
System.out.println(getValue("345", props));
> "some other string"
答案 3 :(得分:0)
我使用string.split(“”)获取所有键值对,然后使用string.replaceFirst()两次解析每个项目(一次获取键,一次获取值)。
我不认为这是最有效的方式,但在打字方面很容易。