将字符串转换为数组列表<MyClass>



我想转换一个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)

我首先尝试创建StringsArrayList:

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;
}

请注意,我依赖于保证正确的输入。您可能需要根据需要调整这个

相关内容

最新更新