我有一个常量列表:
public static final String INSTANCE_PREFIX = "in";
public static final String INDICATOR_PREFIX = "i";
public static final String MODEL_PREFIX = "m";
...
它们具有可变长度,它们放在数字前面,结果是变量的id。例如,它可以是in30
或i2
或m4353
。我试图使方法尽可能抽象,以便考虑x letters x numbers
。这些字母总是会成为我Constants.java
内部的一些前缀,所以我知道的很多,但该方法不知道它使用的是哪种组合。
我只想把数字附在最后。例如,我想从上方传递m4353
,然后返回4353
。它是否使用常量文件是不相关的,但我包括它们,因为它们可能对某些方法有用。
答案 0 :(得分:2)
尝试String
replaceAll
method
例如:
String x = "prefix1111111";
x = x.replaceAll("\\D", "");
int justNum = Integer.parseInt(x);
其中"\\D"
是任何非数字字符。因此它会删除字符串中的所有非数字。
注意,如果您的数字长度超过9位,您可能希望使用Long.parseLong
或Double.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
}
}
如果要捕获前缀,可以使用Pattern.compile("^([a-z]+)([0-9]+)$
代替。
请注意,这些数字现在是第二组,因此它们将在m.group(2)
中捕获,前缀将在m.group(1)
中捕获。