要解析的数据
////////////////////////////////////////////'admin,guest','123','ok;;';
'andy','45,;6','o"k;;';
'mciro','12,;3','o;k;;';
'soft,guest','12;3;','ok,';
'admin,guest','12;3','o"k';分离出来结果:
/////////////////////////////////////
admin,guest
123
ok;;andy
45,;6
o"k;;这些在SQL中都能正常解释,为什么我想了好几天没有想出好的办法来解析.希望有这方面经验的朋友帮帮忙!!!不知道我说的请不清楚. 能不能看懂.  

解决方案 »

  1.   


    public static void main(String[] args) {
    String str = "'admin,guest','123','ok;;'"; StringTokenizer st = new StringTokenizer(str, ",");
    while (st.hasMoreTokens()) {
    String strTemp = st.nextToken();
    if (strTemp.length() > 2)
    System.out.println(strTemp.substring(1, strTemp.length() - 1));
    }
    }
      

  2.   

    public static void main(String[] args) {
    String str = "'admin,guest','123','ok;;'"; ArrayList<String> list = new ArrayList<String>();
    parseString(str, list);
    for(String strTemp:list)
    System.out.println(strTemp);

    }

    public static void parseString(String str,ArrayList<String> list){
    if(!str.startsWith("'")) return;
    str = str.substring(1);
    int index = str.indexOf("',");
    if(index>0){
    list.add(str.substring(0,index));
    parseString(str.substring(index+2), list);
    return;
    }
    index = str.indexOf("'");
    if(index>0)
    list.add(str.substring(0,index));


    }
      

  3.   

    我的方法是先用正则表达式判断输入字符是否满足SQl语句的条件
    满足则继续,不满足则出错import java.util.ArrayList;
    import java.util.DuplicateFormatFlagsException;
    import java.util.Iterator;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test {
    public static void main(String[] args){
    String test="'admin,guest','123','ok;;';";
    ArrayList<String> value=divString(test);
    for(Iterator it=value.iterator();it.hasNext();){
    System.out.println(it.next());
    }

    }
    public static ArrayList<String >divString(String test){
    ArrayList<String> result=new ArrayList<String>();
    String regex="^\\'(.*)\\'\\;$"; Pattern p=Pattern.compile(regex);
    Matcher m=p.matcher(test);
    if(m.matches()){
    test=test.substring(1, test.length()-2);
    }else{
    throw new DuplicateFormatFlagsException("'test';");
    }
    for(String t:test.split("'")){
    if(!t.equals(",")){
    result.add(t);
    }
    }
    return result;
    }
    }
      

  4.   

     还是4楼的程序比较有水准。我也是这两天才接触了 Pattern 和 Matcher 两个类,感觉挺实用的。4楼把这两个类用到此处且到好处啊! 支持4 楼。
      

  5.   

    感谢4楼的朋友给了我启发,也感谢沙发.让我知道了 还有这么多方法能解决这种问题. 
    起初我一直以为能有正则表达式能去直接处理这种问题,在网上苦苦的找了几天 ,结果都不是我想要的结果.今天我又安装我的要求把代码填写完成了.
    /**
     * 字符串处理(Java分析类似SQL语句内的数据)遇到引号很难处理
     * 要解析的数据 
    //////////////////////////////////////////// 'admin,guest','123','ok;;'; 
    'andy','45,;6','o"k;;'; 
    'mciro','12,;3','o;k;;'; 
    'soft,guest','12;3;','ok,'; 
    'admin,guest','12;3','o"k'; 分离出来结果: 
    ///////////////////////////////////// 
    admin,guest 
    123 
    ok;; andy 
    45,;6 
    o"k;; 这些在SQL中都能正常解释,为什么我想了好几天没有想出好的办法来解析.希望有这方面经验的朋友帮帮忙!!! 不知道我说的请不清楚.   能不能看懂.      * MciroAndyFan*
     * 
     */
    import java.util.ArrayList;
    import java.util.DuplicateFormatFlagsException;
    import java.util.List;
    import java.util.regex.Pattern;public class String_SQL2 { public String_SQL2() {
    // TODO Auto-generated constructor stub
    } /**
     * 利用主函数[测试]
     * @param args
     */
    public static void main(String[] args) {
    ///////测试输出字符串///////////
    String test = "'admin,guest','123','ok;;';'admin,guest','123','ok;;';";

    for(String str:OneByOne(test)){  //得到每一条记录组
    System.out.println("//////////////测试输出结果////////////////////");
    for (String s: divString(str)) {  //把每组记录分离出数据
    System.out.println(s);  
    }
    } } /**
     * 把数据分割成一条一条数据
     * @param str
     * @return
     */
    public static List<String> OneByOne(String str){
    List<String> list=new ArrayList<String>(); //利用上行机制声明List容器
    for(String s:str.split("';")){  //找到每条数据的结尾
    list.add(s+"';");  //分割后数据就不真实了  还要加上';
    }
    return list;  
    }

    /**
     * 得到每条记录
     * @param test
     * @return
     */
    public static List<String> divString(String test) {
    List<String> result = new ArrayList<String>();  //利用上行机制声明List容器
    if (Pattern.matches("^\\'(.*)\\'\\;$", test)) {//利用正则测试字符串是否符合要求
    test = test.substring(1, test.length() - 2); //去掉开头的'和末尾的';符合
    } else { //否则有异常出现
    throw new DuplicateFormatFlagsException("异常:"+test+"不符合这个正则'test';");
    }
    for (String t : test.split("'")) {  //截取后的字符串admin,guest','123','ok;;用(')分割
    if (!t.equals(",")) {//分割后应该是[admin,guest , 123] 所以去掉(,)逗号
    result.add(t);  //把正确的数据输入到List容器
    }
    }
    return result;  //把单个数据所有结果返回
    }}
    控制台打印效果如下:
    //////////////测试输出结果////////////////////
    admin,guest
    123
    ok;;
    //////////////测试输出结果////////////////////
    admin,guest
    123
    ok;;
      

  6.   

    我第一次问问题帖子不知道怎么分这20分.   
    1楼的:caiming250
    4楼的:rain_night分别看我7楼的代码  我分别都引用了这两个人的思想. 这分很不好分啊!!