英文:
How to get just the field names from the given string in object format ( not using POJO ) from the following string using regex
问题
以下是字段的名称翻译:
"{
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类。正则表达式可能会起作用。有什么建议吗?
英文:
String is as follows :
"{
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
}
}
}
}"
I need to get only the names of these fields, i.e, account_number,firstname,accountnumber,address,gender. Pojo class won't work here since the content inside objects is not fixed. A reg ex may work. Any suggestions ?
答案1
得分: 1
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 = "{
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
}
}
}
}";
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());
}
}
英文:
Here I have converted ur string into JSON and then retrieved all the keys
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=long\n"
+ " },\n"
+ " firstname={\n"
+ " type=text, fields={\n"
+ " keyword={\n"
+ " ignore_above=256, type=keyword\n"
+ " }\n"
+ " }\n"
+ " },\n"
+ " accountnumber={\n"
+ " type=long\n"
+ " },\n"
+ " address={\n"
+ " type=text, fields={\n"
+ " keyword={\n"
+ " ignore_above=256, type=keyword\n"
+ " }\n"
+ " }\n"
+ " },\n"
+ " gender={\n"
+ " type=text, fields={\n"
+ " keyword={\n"
+ " ignore_above=256, type=keyword\n"
+ " }\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());
}
}
output
[account_number, firstname, accountnumber, address, gender]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论