我要转换此字符串:
String s = "[\"val1\", \"val2\", \"val3\"]";
到数组或ArrayList(无正则表达式和拆分)。它来自数据库,是通用的。在高引号内也可以使用逗号。
这可能吗?
答案 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]