到目前为止,这些结果最接近我的试验答案。
public class Parsing
{
public static void main(String[] args)
{
String a = " mkdir \"ab cd\" 'ab cd' ab cd "; // In fact, this string comes from user input.
System.out.println(a);
String a1[] = a.split("[ ]+");
for (int i = 0; i < a1.length; i++) {
System.out.println(a1[i]); \\ This violate condition 2.
}
List<String> list = new ArrayList<String>();
Matcher m = Pattern.compile("([^']\\S*|'.+?')\\s*").matcher(a);
while (m.find())
list.add(m.group(1).replace("'", ""));
System.out.println(list); \\ This prints [ , mkdir, "ab, cd", ab cd, ab, cd].
// I don't want the first element, also "ab, cd" should be ab cd.
List<String> list2 = new ArrayList<String>();
Matcher p = Pattern.compile("([^\"]\\S*|\".+?\")\\s*").matcher(a);
while (p.find())
list2.add(p.group(1).replace("\"", ""));
System.out.println(list2); \\ This prints [ , mkdir, , ab cd, 'ab, cd', ab, cd].
// I don't want the first element(white space?), also 'ab, cd' should be ab cd.
}
}
发布于 2018-10-25 11:19:49
这个怎么样
String a = " mkdir \"ab cd\" 'ab cd' ab cd ";
String out = a.trim().replaceAll("\\s+", " ");
List<String> list = new ArrayList<String>();
Matcher m = Pattern.compile("([^\"]\\S*|\".+?\")\\s*").matcher(out);
while (m.find())
list.add(m.group(1));
System.out.println(list);
在Java中的空格上几乎是一个Split字符串,除非在引号之间(即将\“hello world \”作为一个标记)
输出
[mkdir, "ab cd", 'ab, cd', ab, cd
https://stackoverflow.com/questions/-100002980
复制相似问题