在字符串中查找第一个数字序列?

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!");