0

我有一个字符串文字,其中包含一系列[a-z]字符,后跟一个数字字符。我想创建一个新的字符串文字,其内容将与旧字符串相同,除了最后一个数字字符。我怎样才能在 Java 中以最优化的方式做到这一点?

例如:

String str = "sometext2";
String newString = "sometext5"; //The digit part is dynamic and I have that value already computed
return  newString 
4

5 回答 5

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

正如您在第三个测试中看到的那样,如果原始 str 没有任何尾随数字,则正则表达式允许附加新数字。如果你想防止这种情况,那么你可以将多重性更改为one or more,即\d+$

于 2013-09-23T11:06:07.503 回答
1

尝试这个

StringBuilder sb = new StringBuilder();
sb.append(str.subString(0, str.length()-1)).append(digit).toString();
于 2013-09-23T10:48:02.127 回答
0

如果它只有一位数,您可以这样做:

return  originalString.substring(0, originalString.length()-1) + newDigit;
于 2013-09-23T11:04:11.553 回答
0

如果只有一位,请使用子字符串

return str.substring(str.length() - 1) + nextDigit;

如果有多个数字,请使用正则表达式

return str.replaceAll("[0-9]+", "" + nextNumber)

如果这是一个紧密的循环,请重用正则表达式而不是使用 replaceAll

于 2013-09-23T10:50:56.960 回答
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
于 2013-09-23T10:48:30.173 回答