获取由xCharsxInts

时间:2015-07-24 15:50:41

标签: java string

我有一个常量列表:

public static final String INSTANCE_PREFIX = "in";
public static final String INDICATOR_PREFIX = "i";
public static final String MODEL_PREFIX = "m";
...

它们具有可变长度,它们放在数字前面,结果是变量的id。例如,它可以是in30i2m4353。我试图使方法尽可能抽象,以便考虑x letters x numbers。这些字母总是会成为我Constants.java内部的一些前缀,所以我知道的很多,但该方法不知道它使用的是哪种组合。

我只想把数字附在最后。例如,我想从上方传递m4353,然后返回4353。它是否使用常量文件是不相关的,但我包括它们,因为它们可能对某些方法有用。

2 个答案:

答案 0 :(得分:2)

尝试String replaceAll method

例如:

String x = "prefix1111111";
x = x.replaceAll("\\D", "");
int justNum = Integer.parseInt(x);

其中"\\D"是任何非数字字符。因此它会删除字符串中的所有非数字。

注意,如果您的数字长度超过9位,您可能希望使用Long.parseLongDouble.parseDouble以及相关的基本类型,因为Java ints只能处理值高达2147483647 < /强>

答案 1 :(得分:2)

在我看来,你根本不在乎前缀,所以我在这个答案中忽略了它们。如果你关心前缀,请向下滚动到这个答案的后半部分:

此代码使用正则表达式提取字符串末尾的尾随数字。

  • ()代表一个捕获组(由m.group(1)使用);
  • [0-9]+表示长度至少为1的数字字符串
  • $表示字符串的结尾,保证数字只是最后的数字。

以下是代码:

private static final Pattern p = Pattern.compile("([0-9]+)$");

public static int extractNumber(String value) {
    Matcher m = p.matcher(value);
    if(m.find()) {
        return Integer.parseInt(m.group(1));
    } else {
        return Integer.MIN_VALUE; // error code
    }
}

Demo.

如果要捕获前缀,可以使用Pattern.compile("^([a-z]+)([0-9]+)$代替。

请注意,这些数字现在是第二组,因此它们将在m.group(2)中捕获,前缀将在m.group(1)中捕获。