我有一些用于解析的值,例如:
Student{id=19, groupId=1, firstName='Alex', lastName='Sparrow'}
我想解析这个字符串并得到一个新的数组列表,它将包含1,Alex,Sparrow
。
只有这个数据。
我想做一个通用解析器,即使有其他对象,如Group{id=22, groupName="BKS",groupCity="Moscow"};
我也将能够解析它并获得列表BKS,groupCity,Moscow
。
也许我可以使用StringBuilder,但我不确定。
如果您只想获取属性值。您可以考虑按键值解析。
Student{id=19, groupId=1, firstName='Alex', lastName='Sparrow'}
获取{}
中的字符串id=19, groupId=1, firstName='Alex', lastName='Sparrow'
然后除以",",您将得到数组的键=值。
使用循环继续分割键和值=
for(string item: data.split(",")){
String[] keyValues = item.split("=")
String key = keyValues[0];
String value = keyValues[1];
}
如果你想转换为DTO或Pojo,你将有更多的步骤来转换键值到对象字段。
您可以使用Java反射来根据名称设置字段的值。
https://www.oracle.com/technical-resources/articles/java/javareflection.html
如果你有字符串:
String string = "Student{id=19, groupId=1, firstName='Alex', lastName='Sparrow'}";
使用正则表达式清除字符串中的空格,{
之前的文本以及{
和}
字符本身(如果value或key可以包含空格,可能需要调整):
string = string.replaceAll("\s|.*\{|\}","");
创建一个地图,这是完美的键-值对,很容易和快速获得值基于键。此外,HashMap还将确保键是唯一的:
Map<String,String> map = new HashMap<>();
用拆分的字符串数据填充map:
for (String item : string.split(",")){
map.put(item.split("=")[0],item.split("=")[1]);
}
现在您可以使用map.get(String key)
获取数据。例如:
map.get("groupId");
并使用如下所述的所有map方法:https://docs.oracle.com/javase/8/docs/api/java/util/Map.html