字符串如下:
"{
account_number={
type=long
},
firstname={
type=text, fields={
keyword={
ignore_above=256, type=keyword
}
}
},
accountnumber={
type=long
},
address={
type=text, fields={
keyword={
ignore_above=256, type=keyword
}
}
},
gender={
type=text, fields={
keyword={
ignore_above=256, type=keyword
}
}
}
}"
我只需要获得这些字段的名称,即account_number、firstname、accountnumber、address和gender。Pojo类在这里不起作用,因为对象内部的内容是不固定的。reg ex可能有效。有什么建议吗?
这里我已经将ur字符串转换为JSON,然后检索所有密钥
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONObject;
public class SOTest {
public static void main(String args[]) {
Set<String> keywords = new HashSet<String>();
final String regex = "[a-z]\w*";
String string = "{n"
+ " account_number={n"
+ " type=longn"
+ " },n"
+ " firstname={n"
+ " type=text, fields={n"
+ " keyword={n"
+ " ignore_above=256, type=keywordn"
+ " }n"
+ " }n"
+ " },n"
+ " accountnumber={n"
+ " type=longn"
+ " },n"
+ " address={n"
+ " type=text, fields={n"
+ " keyword={n"
+ " ignore_above=256, type=keywordn"
+ " }n"
+ " }n"
+ " },n"
+ " gender={n"
+ " type=text, fields={n"
+ " keyword={n"
+ " ignore_above=256, type=keywordn"
+ " }n"
+ " }n"
+ " }n"
+ "}";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while(matcher.find()) {
String gp = matcher.group();
keywords.add(gp);
}
for (String keyword : keywords) {
string = string.replace(keyword, """+keyword+""");
}
string = string.replace("=", ":");
System.out.println(string);
JSONObject jsonObject = new JSONObject(string);
System.out.println(jsonObject.keySet());
}
}
输出
[account_number, firstname, accountnumber, address, gender]