如何从字符串实体中检索指定数据



我有一些用于解析的值,例如:

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