我有一个字符串文字,其中包含一系列[a-z]
个字符,后跟一个数字字符。我想创建一个新的String文字,其内容将与旧字符串相同,但最后一个数字字符除外。如何在Java中以最佳方式执行此操作?
例如:
String str = "sometext2";
String newString = "sometext5"; //The digit part is dynamic and I have that value already computed
return newString
答案 0 :(得分:3)
你可以试试这个正则表达式
\d*$ // 0 or more digits at the end of the string
示例:
@Test
public void replaceTrailingDigits() {
String str = "sometext2".replaceFirst("\\d*$", Integer.toString(5));
Assert.assertEquals("sometext5", str);
str = "sometext226782".replaceFirst("\\d*$", Integer.toString(897623));
Assert.assertEquals("sometext897623", str);
str = "sometext".replaceFirst("\\d*$", Integer.toString(4));
Assert.assertEquals("sometext4", str);
}
正如您在第3次测试中看到的那样,如果原始str没有任何拖尾数字,则regexp允许附加新数字。如果你想阻止它,那么你可以将多重性改为one or more
,即\d+$
答案 1 :(得分:1)
试试这个
StringBuilder sb = new StringBuilder();
sb.append(str.subString(0, str.length()-1)).append(digit).toString();
答案 2 :(得分:0)
if(str != null && !str.isEmpty())
return (str.substring(0, str.length() - 1)).concat(YOUR_OTHER_DIGIT);
else
return str; // Handle appropriately what action you want if str is null or empty
答案 3 :(得分:0)
如果只有一位数,请使用子串
return str.substring(str.length() - 1) + nextDigit;
如果有多个数字,请使用正则表达式
return str.replaceAll("[0-9]+", "" + nextNumber)
如果这是一个紧凑的循环,请重用正则表达式而不是使用replaceAll
答案 4 :(得分:0)
如果只有一位数,你可以这样做:
return originalString.substring(0, originalString.length()-1) + newDigit;