有条件地替换字符串的最后一个字符

时间:2012-05-04 16:26:53

标签: java

我有一个字符串,说xyzabc_1_1

我想首先测试最后字符是否为_1,如果是,请将最后_1替换为_01_1。该字符串将变为xyzabc_1_01_1

查找最后一位数是_1我正在使用

str1.matches("^.*_\\d$")

但不知道第二部分,即如何用_01_1替换最后一次出现。

4 个答案:

答案 0 :(得分:4)

要替换字符串,您只需获取子字符串并连接新的后缀即可。此外,您可以使用endsWith代替正则表达式。恕我直言,它更具可读性。

public String replaceSuffix (String target) {
    if (!target.endsWith("_1")) {
       return target;
    }

    return target.substring(0, target.length() - 2) + "_01_1";
}

只是为了它的乐趣,这里有一个更可重复使用的版本来替换不同的东西:

public String replaceSuffix (String target, String suffix, String replacement) {
    if (!target.endsWith(suffix)) {
        return target;
    }

    String prefix = target.substring(0, target.length() - suffix.length());
    return prefix + replacement;
}

调用为(针对您的具体示例):

String replaced = replaceSuffix("xyzabc_1_1", "_1", "_01_1");

根据您的预期输入,您可能还需要对str进行一些空/空/长度检查。

答案 1 :(得分:2)

这是一个简单的单行,使用replaceAll()和后引用:

String str2 = str1.replaceAll("_\\d$", "_01$0");

目前尚不清楚01是基于1还是常数。即如果2成为02_2,请改为:str1.replaceAll("_(\\d)$", "_0$1_$1")

这是一个测试:

String str1 = "xyzabc_1_1";
String str2 = str1.replaceAll("_\\d$", "_01$0");
System.out.println(str2);

输出:

xyzabc_1_01_1

答案 2 :(得分:0)

你宁愿用新的字符串替换整个字符串。创建一个连接'_01_1'的新字符串。然后替换。

答案 3 :(得分:0)

完成但需要优化......

String str1 = "xyzabc_1";

    /* System.out.println(str1.matches("^.*_\\d$")); */

    try {
        if (str1.matches("^.*_\\d$")) {
            String cutted = str1.substring(str1.lastIndexOf("_"),
                    str1.length());
            str1 = str1.replaceAll(cutted, "_01" + cutted); //
            System.out.println(str1);
        } else {

        }
    } catch (Exception e) {
        e.printStackTrace();
    }