2012-05-04 142 views
1

我有一个字符串,说xyzabc_1_1有条件地替换字符串的最后一个字符

我想第一次测试,如果最后字符_1如果是这样,与_01_1替换最后_1。该字符串将变为xyzabc_1_01_1

为了找到如果最后的数字是_1我使用

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

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

回答

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上进行一些空/空/长度检查。

+0

谢谢....但是如果我们希望字符串替换一下不仅是'_1',而且可以是任何像_2或_3的整数 – user1114509

+0

这是一个不同的问题。你可以为此建立一个解决方案。有很多不同的方法。也许循环一个集合并替换每个集合。或者,如果最好的话可以使用正则表达式。随你便。 –

0

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

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(); 
    } 
1

这是一个简单的一行,使用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 
相关问题