要实现,当逗号是在双引号里时就不分割,该如何实现? 例如字符串:
e23,"dfd,bnn",rty 分割后↓
e23
dfd,bnn
rty
e23,"dfd,bnn",rty 分割后↓
e23
dfd,bnn
rty
解决方案 »
- 我写了个小游戏,然后通过jar命令并且指定了main方法打成了jar包,
- java方法重载问题
- 是不是只有处理流才能调用flush()方法?
- 急问:在swing中画图的时候,怎么让画的图像显示在swing中的组件之上?
- 关于<<JAVA编程思想>>,<<JAVA编程语言>>
- 新手问题 关于对象创建得几种方法
- db2 for as/400 数据插入问题 急!解决后立即揭帖!!!
- 可以给一个在JDK1.4下用的CachedRowSet包吗?
- 如果来修改表格(jtable)中的数据,然后再如果得到修改那一行的数据?
- Java中怎样输出双引号啊?
- (3)如何搭建基于Internet间的实现实时通信?
- 怎么让图片跟随鼠标移动?
String str1, str2,str3;
// TODO 自动生成方法存根 int index1=0 , index2=0 , index3=0 ;
index1 = str.indexOf( "\"") ;
index2 = str.lastIndexOf( "\"" ) ;
String subString = str.substring( index1+1 , index2) ;
if( subString.indexOf( "," ) < 0 )
System.out.println( ",不包含在\"\"中" );
else {
str1 = str.substring( 0 , index1-1 );
str2 = subString ;
str3 = str.substring( index2+2, str.length() -1) ;
System.out.println( ",包含在\"\"中,截取为后为:");
System.out.println( str1);
System.out.println( str2);
System.out.println( str3);输出结果:
,包含在""中,截取为后为:
e23
dfd,bnn
rty
String str = "faf,e23,\"dfd,bnn\",\"adfasdf,rty\",afaf,\"fa,ad\",afasf";
String[] strArray = str.split(",");
for (int i = 0 ; i < strArray.length;) {
if (strArray[i].startsWith("\"")&&strArray[i+1].endsWith("\"")) {
saveList.add(strArray[i].substring(1) + "," + strArray[i+1].substring(0,strArray[i+1].length() - 1));
i += 2;
continue;
}
saveList.add(strArray[i]);
i++;
}
for (int j = 0 ; j < saveList.size(); j++) {
System.out.println(saveList.get(j));
}
上面多了个空格,在java中就无效了
String[] arr = str.split(",(?=\")|(?<=\"),");
说一点题外话,感觉你这个CSV文件出的不规范啊
一般是
"a","bcdf","regd"
的形式吧,偶见得最多像LZ这样的格式,解析起来容易出错的如果是规范的CSV文件话
用StringTokenizer类就可以很好的完成
当为true时不做任何操作,为false时则分开,比较麻烦,但是好操作
package com.saturday.test;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class StringSplit {
public static void main(String[] args){
String sInput="e23,\"dfd,bnn\",rty,我是谁?,\"电影,我是谁\"";
String sReg="[^\\\",]+|\".*?\"";
Pattern p=Pattern.compile(sReg,Pattern.DOTALL);
Matcher m=p.matcher(sInput);
while(m.find()){
System.out.println(m.group());
}
}
}
package com.saturday.test;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class StringSplit {
public static void main(String[] args){
String sInput="e23,\"dfd,bnn\",rty,我是谁?,\"电影,我是谁\"";
String sReg="([^\\\",]+)|\"(.*?)\"";
Pattern p=Pattern.compile(sReg,Pattern.DOTALL);
Matcher m=p.matcher(sInput);
while(m.find()){
if(m.group(1)!=null)
System.out.println(m.group(1));
else
System.out.println(m.group(2));
}
}
}
简单的变通下:if(t.indexOf("\"")!=-1){
//如果有双引号
String[] arr = str.split(",(?=\")|(? <=\"),");
}else{
String[] arr = str.split(",");
}
String str = "e23,\"dfd,bnn\",rty";
String s[] = str.split("\"");
for (String m : s) {
int x=m.indexOf(",");
int y=m.lastIndexOf(",");
if(x!=0){
if(y!=-1&&m.length()-y==1){
m=m.substring(0,y);
}else{
m=m.substring(0,m.length());
}
}else{
if(y!=-1&&m.length()-y==1){
m=m.substring(1,y);
}else{
m=m.substring(1,m.length());
}
}
System.out.println(m);
}
}