本帖最后由 poikillll 于 2012-02-17 15:00:29 编辑

解决方案 »

  1.   

    如果  String sour = "1##f####43####43######1";那么 sour.split("##").length 就是9了 是不是后面拆分出来都是空字符串,就会自动去掉啊
      

  2.   

    String sour = "1##f####43####43######";
    System.out.println(sour.split("##").length);
    List<String> list = new ArrayList<String>();
    for(String s:sour.split("##")){
      list.add(s);
    }
    System.out.println(list.size());打印结果是6,后面两个空串被无视了,
    可是我想要的结果是list的长度为8才对,后面两个空串不能丢,
    如何编码才能获取正确结果
      

  3.   

    String sour = "1##f####43####43####1##";那么 sour.split("##").length 就是8了后面拆分出来都是空字符串,就会自动去掉啊
      

  4.   

    哦,楼主啊,带个参数就好了:sour.split("##", -1);
      

  5.   

    split
    public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。 
    该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。 
      

  6.   

    去看一下JDK上对split方法的叙述吧。有另一个带两个参数的split方法
    public String[] split(String regex, int limit)
    第二个参数的是限制匹配次数的,设为非正数会无限制的尽可能匹配,如果是0的话则还会将最后的空串去掉。而带一个参数的方法实际上就是调用了第二个参数为0的方法。所以,你调用sour.split("##", -1).length可以得到9的结果,因为实际上切了8次,分为9段,最后还有一个空串。如果你一定要等于8的结果的话,就再减1吧。
      

  7.   

    import java.util.List;
    import java.util.ArrayList;
    public class Test{   public static void main(String []args){
       
       /**
         String sour = "1,f,,43,,43,,";
         String []arr = sour.split(",") ;
     System.out.println(arr.length);      for (int i = 0; i < arr.length; i++){
          System.out.println(i+1 + " = " + arr[i]) ;
         }
         */
      String sour = "1##f####43####43######"; List<String> list = new ArrayList<String>() ;

    String tmp = sour;
    String content ;
    int idx  = 0 ;
    while(!"".equals(tmp)){
    idx = tmp.indexOf("##") ;
    list.add(tmp.substring(0 , idx)) ;
    System.out.println(list.size()  + "、" + list.get(list.size()-1)) ;
    tmp = tmp.substring(idx+2) ;

    }
    System.out.println("===" +  list.size() ) ;

       }
    }
    结果:E:\>java Test
    1、1
    2、f
    3、
    4、43
    5、
    6、43
    7、
    8、
    ===8
      

  8.   

        public String[] split(CharSequence input, int limit) {
            int index = 0;
            boolean matchLimited = limit > 0;
            ArrayList matchList = new ArrayList();
            Matcher m = matcher(input);        // Add segments before each match found
            while(m.find()) {
                if (!matchLimited || matchList.size() < limit - 1) {
                    String match = input.subSequence(index, m.start()).toString();
                    matchList.add(match);
                    index = m.end();
                } else if (matchList.size() == limit - 1) { // last one
                    String match = input.subSequence(index,
                                                     input.length()).toString();
                    matchList.add(match);
                    index = m.end();
                }
            }        // If no match was found, return this
            if (index == 0)
                return new String[] {input.toString()};        // Add remaining segment
            if (!matchLimited || matchList.size() < limit)
                matchList.add(input.subSequence(index, input.length()).toString());        // Construct result
            int resultSize = matchList.size();
            if (limit == 0)
                while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
                    resultSize--;
            String[] result = new String[resultSize];
            return (String[])matchList.subList(0, resultSize).toArray(result);
        }