lPsycongroo
2018-02-08 13:39
采纳率: 61.1%
浏览 2.7k
已采纳

java 字符串 替换,求解答

例如有这样一个字符串字符串:用户[$xx$]的名称[$xx$]原值为[$xx$]。。。
[$xx$]的个数1到5个不定,我需要替换$xx$,有什么方法可以替换指定的第几个$xx$,或者按顺序每次替换下一个$xx$也可以,求方法

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

11条回答 默认 最新

  • kuchawyz 2018-02-08 14:57
    已采纳

    /**
    * 从指定位置替换字符,并将字符替换成cha
    * @param str
    * @param num
    * @param cha
    * @return
    */

    public static String checkCode(String str,int num,StringBuffer cha){
    
        String[] shz = str.split("\\$xx\\$");
        StringBuffer newsha = new StringBuffer();
        for(int i=0;i<shz.length;i++){
            System.out.println(shz[i]);
            newsha.append(shz[i]);
            newsha.append("$xx$");
            if(i==num){
                newsha.append(cha);
            }
            System.out.println(i);
        }
        return newsha.toString();
    
    }
    
    点赞 评论
  • fm2zhaoyong2 2018-02-08 14:36
        String sourceStr="用户[$xx$]的名称[$xx$]原值为[$xx$]";
        String result=sourceStr.replaceFirst("\\$xx\\$", "需要替换的字符串");
        System.out.print(result);
        不知满足要求不
    
    点赞 评论
  • fm2zhaoyong2 2018-02-08 14:49

    若果上面的不满足你的需求,或许你的意思是每次都替换其中一个,其余的部分不改变,那么你的设计思路可以这样:
    1 定义一个变量cursor=0,来记录每次需要替换的[$xx$]的下标,
    2获取前缀preSub=subString(0,cursor),获取后缀postSub=subString(cursor+[$xx$].length);
    3 拼接字符串:preSub+需要替换的字符串+postSub
    4 cursor+=[$xx$].length),这样重复2,3步骤,就可以了

    点赞 评论
  • ZCVF 2018-02-08 14:55

    /**
    *
    * @param source 源字符串
    * @param needrep 被替换的字符串
    * @param rep 替换的字符串
    * @param count 需要替换第几个
    * @return 换过之后的字符串
    */
    public static String replace(String source,String needRep,String rep,int count){
    StringBuilder builder = new StringBuilder(source);
    int j = 0;
    for(int i=0;i<count;i++){
    j=builder.indexOf(needRep,j);
    if(j==-1){
    return "";
    }
    j=j+1;
    }
    builder.replace(j-1, j-1+needRep.length(),rep);
    return builder.toString();
    }

    点赞 评论
  • bear_0X0000 2018-02-08 16:05
        public String fun3(String str,String regex,Function<Integer,String>fn ) {
            StringBuilder sb = new StringBuilder(str);
            Pattern p = Pattern.compile(regex);
            int count = 0;
            Matcher m = p.matcher(sb.toString());
            while(m.find()) {
                    int start = m.start();
                    int end = m.end();
                    sb.replace(m.start(), m.end(),fn.apply(count));
                    count++;
                    m = p.matcher(sb.toString());
            }
            return sb.toString();
        }
    
     String result = new NonBlocking().fun3("用户[$xx$]的名称[$xx$]原值为[$xx$]", "\\[\\$xx\\$\\]", (count)->{
                return "|第"+count+"次替换|";
            });
            System.out.println(result);
    
    点赞 评论
  • jingeshi 2018-02-09 01:24

    System.err.println(String.format("用户[%s]的名称[$%s$]原值为[%s]", "张三", "李四","王五"));
    打印:用户[张三]的名称[$李四$]原值为[王五]

    点赞 评论
  • whb3299065 2018-02-09 01:25

    加个分组,
    Pattern pattern = Pattern.compile("($xx$)?");//括号里是你的正则,?表示非贪婪,忘了这里需不需要了,要是不对去掉试试
    Matcher m = p.matcher(strData);// 这里写你的数据源
    while(m.find()) {//find一次,表示查找一次
    m.group();//表示获取整个分组
    m.group(1);//表示获取第一个分组
    }
    记次的话很简单,试着自己写一下,无非就是提一个变量,然后每次++就好了

    点赞 评论
  • qq_34201784 2018-02-09 01:31

    String sourceStr="用户[$xx$]的名称[$xx$]原值为[$xx$]";
    String result=sourceStr.replaceFirst("\$xx\$", "需要替换的字符串");
    System.out.print(result);
    不知满足要求不

    点赞 评论
  • C博士 2018-02-09 02:05

    String.format("%sxxx%sxxx%s",s1,s2,s3),用占位符就可以

    点赞 评论
  • lPsycongroo 2018-02-09 02:26

    我再说明下需求,$xx$的数量不定,传入一个字符串数组,数组的长度跟$xx$数量相同,位置相同。例如这样:
    public void getConten(string ... iden){
    string conten = "用户[$xx$]....";
    .....
    }
    怎么做比较方便替换

    点赞 评论
  • wangj8930 2018-02-23 02:13

    按字符数量replace,看你的需求不需修改字符串的位置是固定的

    点赞 评论

相关推荐 更多相似问题