当前位置:编程学习 > JAVA >>

字符串分割问题

有字符串 a,b,c,"a,b",c,d,"e,f",d我想分割成
a
b
c
a,b
c
d
e,f
d
有人知道怎么分割吗? --------------------编程问答--------------------


public static void main(String argv[]) {
  String s="a,b,c,'a,b',c,d,'e,f',d";
  List list = splitMethod(s);
  for(int i=0;i<list.size();i++){
  System.out.println(list.get(i));
  }
}

private static List splitMethod(String s) {
List list = new ArrayList();
String[] s1=s.split("'");
  for(String lists:s1){
  if(lists.startsWith(",")||lists.endsWith(",")){
  String [] s2=lists.split(",");
  for(String list2:s2){
  if(!list2.equals("")){
  list.add(list2);
  }
  }
  }else{
  list.add(lists);
  }
  }
return list;
}
--------------------编程问答--------------------
引用 1 楼 fangmingshijie 的回复:
Java code?12345678910111213141516171819202122232425public static void main(String argv[]) {  String s="a,b,c,'a,b',c,d,'e,f',d";  List list = splitMethod(s);  for(int i=0;i<list.size();i+……

--------------------编程问答--------------------
引用 1 楼 fangmingshijie 的回复:
Java code?12345678910111213141516171819202122232425public static void main(String argv[]) {  String s="a,b,c,'a,b',c,d,'e,f',d";  List list = splitMethod(s);  for(int i=0;i<list.size();i+……


显然错误理解了LZ的意图。这个是典型的CSV格式(外面只能双引号,不用单引号)。因为CSV中,
a,b,"c""d",e
是需要分割成
a b c"d e

用csv库吧。比如这个
http://commons.apache.org/proper/commons-csv/
--------------------编程问答--------------------
引用 3 楼 shine333 的回复:
引用 1 楼 fangmingshijie 的回复:Java code?12345678910111213141516171819202122232425public static void main(String argv[]) {  String s="a,b,c,'a,b',c,d,'e,f',d";  List list = splitMethod(s);  fo……
额,学习了。 --------------------编程问答-------------------- 除 --------------------编程问答--------------------   String s="a,b,c,'a,b',c,d,'e,f',d"; 
           String[] str = s.split(",");
           List list = new ArrayList(); 
           for(int i=0;i<str.length;i++)
           {
               boolean flag = true;
               if(str[i].startsWith("'"))
               {
                   flag = false;
                   System.out.println(str[i]+","+str[i+1]);
                   list.add(str[i]+","+str[i+1]);
               }
               if(str[i].endsWith("'"))
               {
                   flag = false;
               }
               if(flag)
               {
                  list.add(str[i]);
               }
           } --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 先将 a,b,c,"a,b",c,d,"e,f",d 根据符号"拆分成长度为5的字符串数组,然后将数组的[0]、[2]里面的元素继续根据逗号,分别拆分成字符数组。最后组拼。 --------------------编程问答--------------------
String s = "a,b,c,\"a,b\",c,d,\"e,f\",d";
Stack<Character> stack = new Stack<Character>();
boolean b = true;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char chx = s.charAt(i);
if (chx == '"') {
if (stack.isEmpty()) {
stack.push(chx);
} else {
stack.pop();
}
}
if (stack.isEmpty()) {
b = true;
} else {
b = false;
}
if (chx == ',') {
if (b) {
sb.append('\n');
} else {
sb.append(chx);
}
} else if (chx != '"') {
sb.append(chx);
}
}
System.out.println(sb);
--------------------编程问答--------------------
// 有字符串 a,b,c,"a,b",c,d,"e,f",d我想分割成a
/*
 * b c a,b c d e,f d
 */
public static void main(String[] args) {
String str = "a,b,c,\"a,b\",c,d,\"e,f\",d";
String[] s = str.split("\"");
for (int x = 0; x < s.length; x++) {
System.out.println(s[x] + "  ");
}
System.out.println("-------------------");
List<String> l = new ArrayList<String>();
Set ss = new HashSet();
for (int i = 0; i < s.length; i++) {

for (int j = 0; j < s[i].length(); j++) {


if (i == 0) {
if (s[i].toCharArray()[j] == ',') {
continue;
} else {
l.add(String.valueOf(s[i].toCharArray()[j]));
}
} else {
if (s[i].charAt(0) == ',') {
if (s[i].toCharArray()[j] == ',') {
continue;
} else {
l.add(String.valueOf(s[i].toCharArray()[j]));
}

} else {
ss.add(s[i]);
}
}
}

}
Iterator it = ss.iterator();
while (it.hasNext()) {
l.add((String) it.next());
}
Iterator i = l.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
--------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 11楼的好强大啊学习了 --------------------编程问答--------------------
引用 1 楼 fangmingshijie 的回复:
Java code?12345678910111213141516171819202122232425public static void main(String argv[]) {  String s="a,b,c,'a,b',c,d,'e,f',d";  List list = splitMethod(s);  for(int i=0;i<list.size();i+……
+1 --------------------编程问答--------------------

/** 
 * a,b,c,"a,b",c,d,"e,f",d --> a b c a,b c d e,f d
 * @param str
 * @return 
 * @author 你猜 
 * @date 2013-9-27
 */
public static List<String> strSplit(String str){
Pattern p = Pattern.compile(Matcher.quoteReplacement("\"[^\"]*\""));
Matcher m = p.matcher(str);
List<String> elements = new ArrayList<String>();
while (m.find()) {
elements.add(m.group().substring(1,m.group().length() - 1));
}
List<String> strs = new ArrayList<String>(Arrays.asList(p.split(str)));
for (String s : strs) {
if(!"".equals(s)){
for (String ss : s.split(",")) {
if(!"".equals(ss))
elements.add(ss);
}
}
}
return elements;
}
--------------------编程问答-------------------- 一、基本的思路是进行两次的分割
                               第一次单分离出来引号的组合
                               第二次接着分离出,然后添加
二、可不可以这样啊
                       1.首先把,替换为别的符号
                       2.循环如果""之间的别的符号在替换回来
                       3.分割 --------------------编程问答-------------------- public static void main(String[] args) {
String str = "a,b,c,\"a,b\",c,d,\"e,f\",d";
String[] strArray=str.split(",");
List<String> list=new ArrayList<String>();
boolean flag=false;
StringBuffer buffer=new StringBuffer();
for(String s:strArray){
if(s==null||"".equals(s)){
continue;
}
if(s.length()==1&&!flag){
list.add(s);
}else{
if(s.endsWith("\"")){
buffer.append(s);
flag=false;
list.add(buffer.toString());
buffer=new StringBuffer();
}else{
flag=true;
buffer.append(s).append(",");
}
}
}
for(String s:list){
System.out.println(s);
}

}

写着玩玩的不好别见怪 --------------------编程问答-------------------- 除
补充:Java ,  J2ME
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,