有没有一种方法可以将字符串转换为Java中的数组?

时间:2018-12-11 10:50:33

标签: java

我要转换此字符串:

String s = "[\"val1\", \"val2\", \"val3\"]";

到数组或ArrayList(无正则表达式和拆分)。它来自数据库,是通用的。在高引号内也可以使用逗号。

这可能吗?

4 个答案:

答案 0 :(得分:1)

不幸的是,没有Java API可以直接解析此列表。

此代码段适用于此字符串:

    String s = "[\"val1\", \"val2\", \"val3\"]";
    String[] arr = s.replace("[", "").replace("]", "").split("\\s*,\\s*");
    List<String> list = Arrays.asList(arr);

如果该字符串在其他位置包含[],则上面的代码段将无效。

我建议弄清楚这是什么。这是JSON数组吗?然后使用JSON解析器。这是具有附加[]的csv吗?然后使用CSV解析器。

答案 1 :(得分:1)

String json = "[\"val1\", \"val2\", \"val3\"]";
JSONArray jsonarray = new JSONArray(json);
List<Object> objects = jsonarray.toList();

感谢@TamasRev

答案 2 :(得分:1)

是的,有一种使用Regex的方法。

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class T1 {
    public static void main(String[] args) {
        final String REGEX = "\\b([\\w]+)\\b";
        String INPUT = "[\"val1\", \"val2\", \"val3\"]";

        Pattern p = Pattern.compile(REGEX);
        Matcher m = p.matcher(INPUT);   // get a matcher object
        List<String> myList = new ArrayList<>();

        while(m.find()) {
            myList.add(m.group());
        }

        System.out.println(myList);
    }
}

答案 3 :(得分:0)

您可以使用 String标记器并将其设置为定界符" \",[]"。 这是我的例子。我已经使用了一个数组,但是如果需要的话,将其转换为ArrayList非常简单。

public static void main(String[] args) {
    String s = "[\"val1\", \"val2\", \"val3\"]";

    String delims = " \",[]";

    StringTokenizer st = new StringTokenizer(s, delims);

    System.out.println("Num of Token = " + st.countTokens());
    String[] myArr= new String[st.countTokens()];


    for(int i=0; i<myArr.length && st.hasMoreTokens(); i++)
        myArr[i]=st.nextToken();

    //output
    System.out.println(Arrays.toString(myArr));
}

您的输出将是:

  

令牌总数= 3

     

[val1,val2,val3]