我想转换一个String
myString像这样:
[ ["cd",5,6,7], ["rtt",55,33,12], ["by65",87,87,12] ]
转换成ArrayList<CustomClass>
其中CustomClass
有构造函数:
public CustomClass (String name, int num1, int num2, int num3)
我首先尝试创建Strings
的ArrayList
:
List<String> List = new ArrayList<String>(Arrays.asList(myString.split("[")));
不适合我…
我怎样才能得到这样的东西呢?
List - {CustomClass,CustomClass,CustomClass,CustomClass}
第一个CustomClass = CustomClass.name="cd" , CustomClass.num1=5,CustomClass.num2=7...
second CustomClass = CustomClass.name="rtt",CustomClass.num1=55,CustomClass.num2=55...
您可以这样做。如果你不能保证字符串格式,那么你可能需要添加额外的检查拼接数组的长度和索引。
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class CustomClass {
String name;
int num1;
int num2;
int num3;
public CustomClass(String name, int num1, int num2, int num3) {
super();
this.name = name;
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
}
}
public class Sample {
public static void main(String[] args) {
String str = "[ ["cd",5,6,7], ["rtt",55,33,12], ["by65",87,87,12] ]";
Pattern p = Pattern.compile("\[(.*?)\]");
Matcher m = p.matcher(str.substring(1));
List<CustomClass> customList = new ArrayList<CustomClass>();
while (m.find()) {
String[] arguments = m.group(1).split(",");
customList.add(new CustomClass(arguments[0],
Integer.parseInt(arguments[1]),
Integer.parseInt(arguments[2]),
Integer.parseInt(arguments[3])));
}
}
}
<<p> Gson解决方案/strong> public static void main(String[] args) {
String json = "[ ["cd",5,6,7], ["rtt",55,33,12], ["by65",87,87,12] ]";
List<CustomClass> customList = new ArrayList<CustomClass>();
String[][] data = new Gson().fromJson(json, String[][].class);
for (String[] strArray : data){
customList.add(new CustomClass(strArray[0],
Integer.parseInt(strArray[1]),
Integer.parseInt(strArray[2]),
Integer.parseInt(strArray[3])));
}
System.out.println(customList);
}
这里有一个快速的"by-hand"解析器。
public static List<CustomClass> parseString(String str) {
String [] elements = str.split("\[");
List <CustomClass> result = new ArrayList<CustomClass>();
for (String elem : elements) {
if (elem.contains("]")) {
String seq = elem.substring(0, elem.indexOf(']'));
String [] tokens = seq.split(",");
result.add(new CustomClass(tokens[0].substring(1,tokens[0].length()-1),
Integer.parseInt(tokens[1]),
Integer.parseInt(tokens[2]),
Integer.parseInt(tokens[3])));
}
}
return result;
}
请注意,我依赖于保证正确的输入。您可能需要根据需要调整这个