在字符串中查找第一个数字序列?
Find first sequence of numbers in a string?
所以首先我想澄清一下,这是一个 Minecraft 插件。所以我有一个方法可以生成一些生物(你不知道它是什么生物),并给它们自定义名称。名称基于数字。但我的名字中也有一系列字符。因此,例如,如果暴民的名称是“355 Blaze”,它将 return 一个 355 的整数,并将其余部分删除。我应该怎么做?目前我使用 substring 但它不起作用,因为如果数字超过 9 它只会 return 第一个数字。
如果它被space分隔,使用基于第一个space的位置的子字符串:
Integer mobId = new Integer(fullMobName.substring(0, fullMobName.indexOf(" ")));
只需使用正则表达式即可。
private final static Pattern p = Pattern.compile("\d+");
static String firstNum(String s) {
Matcher m = p.matcher(s);
return m.find() ? m.group() : null;
}
如果它只包含数字后跟字母(可能有一个可选的 space),这也可以工作:
String ss[] = original.split("a-zA-Z ]", 2);
//ss[0] contains the numbers
您可以在替换方法中使用正则表达式
String s = "355 Blaze";
s.replaceAll("[A-Za-z\s]+", "");
然后你可以转换为 int。
不使用正则表达式(假设数字为正且符合 int
):
int i = 0;
// Skip past non-digits.
while (i < s.length() && !Character.isDigit(s.charAt(i))) {
++i;
}
if (i < s.length()) {
int num = 0;
// Accumulate the digits into the result.
while (i < s.length() && Character.isDigit(s.charAt(i))) {
num = 10 * num + Character.getNumericValue(s.charAt(i));
++i;
}
return num;
}
// No digits found.
throw new NoSuchElementException("No digits found!");
所以首先我想澄清一下,这是一个 Minecraft 插件。所以我有一个方法可以生成一些生物(你不知道它是什么生物),并给它们自定义名称。名称基于数字。但我的名字中也有一系列字符。因此,例如,如果暴民的名称是“355 Blaze”,它将 return 一个 355 的整数,并将其余部分删除。我应该怎么做?目前我使用 substring 但它不起作用,因为如果数字超过 9 它只会 return 第一个数字。
如果它被space分隔,使用基于第一个space的位置的子字符串:
Integer mobId = new Integer(fullMobName.substring(0, fullMobName.indexOf(" ")));
只需使用正则表达式即可。
private final static Pattern p = Pattern.compile("\d+");
static String firstNum(String s) {
Matcher m = p.matcher(s);
return m.find() ? m.group() : null;
}
如果它只包含数字后跟字母(可能有一个可选的 space),这也可以工作:
String ss[] = original.split("a-zA-Z ]", 2);
//ss[0] contains the numbers
您可以在替换方法中使用正则表达式
String s = "355 Blaze";
s.replaceAll("[A-Za-z\s]+", "");
然后你可以转换为 int。
不使用正则表达式(假设数字为正且符合 int
):
int i = 0;
// Skip past non-digits.
while (i < s.length() && !Character.isDigit(s.charAt(i))) {
++i;
}
if (i < s.length()) {
int num = 0;
// Accumulate the digits into the result.
while (i < s.length() && Character.isDigit(s.charAt(i))) {
num = 10 * num + Character.getNumericValue(s.charAt(i));
++i;
}
return num;
}
// No digits found.
throw new NoSuchElementException("No digits found!");