返回一个与原始String几乎相同的子字符串

时间:2013-09-23 10:45:24

标签: java regex string

我有一个字符串文字,其中包含一系列[a-z]个字符,后跟一个数字字符。我想创建一个新的String文字,其内容将与旧字符串相同,但最后一个数字字符除外。如何在Java中以最佳方式执行此操作?

例如:

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

5 个答案:

答案 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;