原"a|b||c|d|||||||e||"  变成"a||b||c||d||e"也就是 将所有的字母间的"|"都变成"||"

解决方案 »

  1.   

    a||b||c||d||e||最后的||也不要?
      

  2.   

    s.replaceAll("(?<=[a-zA-Z])\\|+(?=[a-zA-Z])","||")
      

  3.   

    不用正则 你就只能用循环加 String.charAt()-.-
      

  4.   

    可以用一个stringbuffer,charAt,遇到非|简单插入,遇到|插入||就行了。
      

  5.   

    是不是得到一个String(例如:"a|b||c|d|||||||e||"),然后不管两个字母之间有多少个"|",都保持字母间只有两个"|"。而且,最后是不是一定要正正好好两个"|"
    这样的话,不如换种思路,把字母取出来,然后在中间插两个"|"。
      

  6.   

    支持littlefish的想法,很简单的思路,遇到char,就插入这个char和||,遇到其他的就直接过去:
            String string="a|b||c|d|||||||e||";
            char[] chars=string.toCharArray();
            StringBuilder sBuilder=new StringBuilder();
            for(char c:chars){
                if(Character.isLetter(c)){
                    sBuilder.append(c);
                    sBuilder.append("||");
                }
            }
            String result=sBuilder.toString();
      

  7.   

    treeroot的方法也不错:s.replaceAll("(?<=[a-zA-Z])\\|+(?=[a-zA-Z])","||")
    但是好像规则表达式不用那么复杂吧:
    s.replaceAll("\\|+","||")
    这样不就行了吗?
      

  8.   

    (?<=X) X,通过零宽度的正 lookbehind 
    (?=X) X,通过零宽度的正 lookahead 
    这两句啥意思~ API文档里写的不清不楚。