我有一个字符串文字,其中包含一系列[a-z]
字符,后跟一个数字字符。我想创建一个新的字符串文字,其内容将与旧字符串相同,除了最后一个数字字符。我怎样才能在 Java 中以最优化的方式做到这一点?
例如:
String str = "sometext2";
String newString = "sometext5"; //The digit part is dynamic and I have that value already computed
return newString
你可以试试这个正则表达式
\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);
}
正如您在第三个测试中看到的那样,如果原始 str 没有任何尾随数字,则正则表达式允许附加新数字。如果你想防止这种情况,那么你可以将多重性更改为one or more
,即\d+$
尝试这个
StringBuilder sb = new StringBuilder();
sb.append(str.subString(0, str.length()-1)).append(digit).toString();
如果它只有一位数,您可以这样做:
return originalString.substring(0, originalString.length()-1) + newDigit;
如果只有一位,请使用子字符串
return str.substring(str.length() - 1) + nextDigit;
如果有多个数字,请使用正则表达式
return str.replaceAll("[0-9]+", "" + nextNumber)
如果这是一个紧密的循环,请重用正则表达式而不是使用 replaceAll
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