字符串: abc 123 1 "d e f"
要拆分成:
abc
123
1
d e f如果使用split(空格),则双引号里面的也被拆分了。
现在想找个正则表达式,能忽略双引号里面的空格。
要拆分成:
abc
123
1
d e f如果使用split(空格),则双引号里面的也被拆分了。
现在想找个正则表达式,能忽略双引号里面的空格。
解决方案 »
- 导入java.media.*;时报错怎么办?
- 烦心事~~java
- int类型的-17 转换成2进制数是多少?
- 舞伴问题
- 标准MD5是不是有好几个版本 还是只有一个版本?
- 如何实现在jTextfield中从右侧输入,请各位高手指教,详细一点好吗?
- 关于j2ee
- 在java中如何判断目录是否存在
- 为什么在JBuider6中用Swing组件做的Applet,在IE浏览器中看不见
- 谁知道Mastering Enterprise Java Beans II这本书在那里可以下载到???
- 怎么把JFileChooser里选择的文件传给textfield文本框里
- 有没有人能帮我还原这段被混淆了的代码?看似简单,但我没弄出来- -
String[] ss = str.split("\\s(^'\\s*')");
System.out.println(s);
String[] ss = str.split("\\s(^\"\\s*\")");
Pattern p = Pattern.compile("\".+\"|\\S+\\s");
|符号前后不能换顺序。
你写的是这个么?
String str ="abc 123 1 \"d e f\"";
String[] ss = str.split("\\s(^\"\\s*\")");我测试的结果是:完全没效果啊
ss数组的长度是1
你坑,能再坑?String str ="abc 123 1 \"d e f\"";
String[] ss = str.split("\\s(^\"\\s*\")");
for(String s:ss){
System.out.println(s);
}
String[] array=str.split("\\s\"");
int length=array==null?0:array.length;
for(int i=0;i<length;i++){
if(array[i].endsWith("\"")){
System.out.println(array[i].replaceAll("\"", ""));
}else{
String[] temp=array[i].split(" ");
int tempLength=temp==null?0:temp.length;
for(int j=0;j<tempLength;j++){
System.out.println(temp[j]);
}
}
}
自己分析还不如用现成的库呢 opencsv好用省事。 public static void main(String[] args) throws IOException {
String str = "abc 123 1 \"d e f\"";
CSVReader reader = new CSVReader(new CharArrayReader(str.toCharArray()), ' ');
String [] nextLine;
while ((nextLine = reader.readNext()) != null) {
for (String s : nextLine) {
System.out.println(s);
}
}
}
opencsv
Scanner sc = new Scanner(str);
ArrayList<String> lst = new ArrayList<String>();
while (sc.hasNext()) {
lst.add(sc.findInLine("\"[^\"]+\"|\\S+").replaceAll("\"", ""));
}
String[] result = lst.toArray(new String[0]);
System.out.println(lst);也即输入字符串为:
abc 123 1 "d e fs" "X Y Z" "a" "X X" W "Y Y"
分解结果是:
[abc, 123, 1, d e fs, X Y Z, a, X X, W, Y Y]
(-a,-b,-c带参数,-d不带参数,-c的参数有空格,使用双引号括起来)我想把 -c 的参数 "q w e" 取出来。刚才看到ldh911同学用Scanner的findInLine方法,其实我这一行字符串本就是通过Scanner读取进来的。
并不影响你再用一个新的Scanner去扫描你所读取出来的这行字符串。只不过是说,既然你存在 参数名和参数值 关系,其实也不用转成数组了,直接List就可以了,反正你还得再遍历一次来解释各参数关系以及让参数发生效用。
对。
我就是再想,可不可以只用一次Scannaer,在scanner读取的时候就顺便给解析了,避免创建两次对象呢。
有个库Args4j。 专门分析命令行参数的。
http://sunxboy.iteye.com/blog/697708
如果你们参数也挺复杂,可以推荐使用库。
也可以,无非是你先用Scanner把前面那个“console”读取掉,然后面就用 findInLine就行了。
哦,好的,我去查一查。
目前用的是commons-cli-1.2来处理命令参数的,不过首先得把命令的数组args[]弄出来。
我去看看args4j是不是更方便。