我有一个字符串,说xyzabc_1_1
。有条件地替换字符串的最后一个字符
我想第一次测试,如果最后字符_1
如果是这样,与_01_1
替换最后_1
。该字符串将变为xyzabc_1_01_1
。
为了找到如果最后的数字是_1
我使用
str1.matches("^.*_\\d$")
但不知道第二部分,即如何与_01_1
替换最后一次出现。
我有一个字符串,说xyzabc_1_1
。有条件地替换字符串的最后一个字符
我想第一次测试,如果最后字符_1
如果是这样,与_01_1
替换最后_1
。该字符串将变为xyzabc_1_01_1
。
为了找到如果最后的数字是_1
我使用
str1.matches("^.*_\\d$")
但不知道第二部分,即如何与_01_1
替换最后一次出现。
要替换字符串,您可以抓住一个子字符串并连接新的后缀。此外,您可以使用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
上进行一些空/空/长度检查。
你宁愿用新的替换整个字符串。用'_01_1'连接创建一个新字符串。然后更换。
完成,但需要优化......
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();
}
这是一个简单的一行,使用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
谢谢....但是如果我们希望字符串替换一下不仅是'_1',而且可以是任何像_2或_3的整数 – user1114509
这是一个不同的问题。你可以为此建立一个解决方案。有很多不同的方法。也许循环一个集合并替换每个集合。或者,如果最好的话可以使用正则表达式。随你便。 –