在java中有没有一种将字符串转换为数组的方法?

在java中有没有一种将字符串转换为数组的方法?,java,Java,我要转换此字符串: String s = "[\"val1\", \"val2\", \"val3\"]"; String s = "[\"val1\", \"val2\", \"val3\"]"; String[] arr = s.replace("[", "").replace("]", "").split("\\s*,\\s*"); List<String> list = Arrays.asList(arr); 到数组或ArrayList(不带正则表

我要转换此字符串:

String s = "[\"val1\", \"val2\", \"val3\"]";
    String s = "[\"val1\", \"val2\", \"val3\"]";
    String[] arr = s.replace("[", "").replace("]", "").split("\\s*,\\s*");
    List<String> list = Arrays.asList(arr);
到数组或ArrayList(不带正则表达式和拆分)。它来自数据库,是通用的。也可以在高引号内加逗号


这可能吗?

您可以使用字符串标记器并将其设置为分隔符
“\”,[]”
。 这是我的例子,我使用了一个数组,但是如果你愿意的话,在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));
}
publicstaticvoidmain(字符串[]args){
字符串s=“[\“val1\”、\“val2\”、\“val3\””;
字符串delims=“\”,[]”;
StringTokenizer st=新的StringTokenizer(s,delims);
System.out.println(“令牌数=“+st.countTokens());
String[]myArr=新字符串[st.countTokens()];

对于(int i=0;i您可以使用字符串标记器并将其设置为分隔符
“\”,[]”
。 这是我的例子,我使用了一个数组,但是如果你愿意的话,在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));
}
publicstaticvoidmain(字符串[]args){
字符串s=“[\“val1\”、\“val2\”、\“val3\””;
字符串delims=“\”,[]”;
StringTokenizer st=新的StringTokenizer(s,delims);
System.out.println(“令牌数=“+st.countTokens());
String[]myArr=新字符串[st.countTokens()];

不幸的是,对于(inti=0;i),没有JavaAPI可以直接解析这个列表

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

String s = "[\"val1\", \"val2\", \"val3\"]";
    String s = "[\"val1\", \"val2\", \"val3\"]";
    String[] arr = s.replace("[", "").replace("]", "").split("\\s*,\\s*");
    List<String> list = Arrays.asList(arr);
String s=“[\'val1\”、\'val2\”、\'val3\”;
字符串[]arr=s.replace(“[”,”).replace(“]”,“).split(“\\s*,\\s*”);
List=Arrays.asList(arr);
如果字符串包含其他地方的
[
]
,则上面的代码段将不起作用


我建议找出这是什么。这是一个JSON数组吗?然后使用JSON解析器。这是一个带有附加
[
]
的csv吗?然后使用csv解析器。

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

String json = "[\"val1\", \"val2\", \"val3\"]";
JSONArray jsonarray = new JSONArray(json);
List<Object> objects = jsonarray.toList();
此代码段适用于此字符串:

String s = "[\"val1\", \"val2\", \"val3\"]";
    String s = "[\"val1\", \"val2\", \"val3\"]";
    String[] arr = s.replace("[", "").replace("]", "").split("\\s*,\\s*");
    List<String> list = Arrays.asList(arr);
String s=“[\'val1\”、\'val2\”、\'val3\”;
字符串[]arr=s.replace(“[”,”).replace(“]”,“).split(“\\s*,\\s*”);
List=Arrays.asList(arr);
如果字符串包含其他地方的
[
]
,则上面的代码段将不起作用

我建议找出这是什么。这是一个JSON数组吗?然后使用JSON解析器。这是一个带有附加
[
]
的csv吗?然后使用csv解析器。

String JSON=“[\“val1\”,“val2\”,“val3\”;
String json = "[\"val1\", \"val2\", \"val3\"]";
JSONArray jsonarray = new JSONArray(json);
List<Object> objects = jsonarray.toList();
JSONArray JSONArray=新JSONArray(json); List objects=jsonarray.toList();
感谢@TamasRev

String json=“[\'val1\”、\'val2\”、\'val3\”;
JSONArray JSONArray=新JSONArray(json);
List objects=jsonarray.toList();

感谢@TamasRev

是的,有一种使用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);
    }
}
import java.util.ArrayList;
导入java.util.List;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
T1类{
公共静态void main(字符串[]args){
最后一个字符串REGEX=“\\b([\\w]+)\\b”;
字符串输入=“[\“val1\”、\“val2\”、\“val3\””;
Pattern p=Pattern.compile(REGEX);
Matcher m=p.Matcher(输入);//获取Matcher对象
List myList=new ArrayList();
while(m.find()){
myList.add(m.group());
}
System.out.println(myList);
}
}

是的,有一种使用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);
    }
}
import java.util.ArrayList;
导入java.util.List;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
T1类{
公共静态void main(字符串[]args){
最后一个字符串REGEX=“\\b([\\w]+)\\b”;
字符串输入=“[\“val1\”、\“val2\”、\“val3\””;
Pattern p=Pattern.compile(REGEX);
Matcher m=p.Matcher(输入);//获取Matcher对象
List myList=new ArrayList();
while(m.find()){
myList.add(m.group());
}
System.out.println(myList);
}
}

您好,您尝试过正则表达式吗?是的,我有一个正则表达式解决方案。我的问题是,在java中是否有一个简单的解决方案可以做到这一点?@Mickaelwhy您会问,如果您已经有了解决方案,是否有可能……因为这是关于是否有比用正则表达式解析并创建数组更好的解决方案。也许有一个好的库或方法。它是看起来像String[]toString…(相同格式)这是关于是否有比用正则表达式解析它并创建数组更好的解决方案——当你问“这可能吗”时,我们应该猜测一下?你好,你试过正则表达式吗?是的,我有一个正则表达式的解决方案。我的问题是,在java中是否有一个简单的解决方案可以做到这一点?@Mickaelwhy你问如果你已经有了一个解决方案,是否有可能……因为这是关于是否有一个比用正则表达式解析并创建数组更好的解决方案。也许有一个好的库或方法。看起来就像String[]toString…(相同格式)一样,这是关于是否有比用正则表达式解析它并创建数组更好的解决方案——当你问“这可能吗?”时,我们应该猜到这一点?这是JSON数组吗?这是JSON数组吗?是的