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

时间:2016-04-22 14:31:21

标签: java minecraft bukkit

首先,我想通过说这是一个Minecraft插件来解决问题。所以我有一种方法来产生一些怪物(你不知道怪物是什么),并给它们自定义名称。名称基于数字。但我的名字中也有一系列字符。因此,例如,如果暴徒的名字是" 355 Blaze"它将返回355的int,并将其余部分删除。我该怎么做?目前我使用子字符串,但它不起作用,如果数字超过9,它将仅返回第一个数字。

5 个答案:

答案 0 :(得分:6)

如果用空格分隔,则根据第一个空格的位置使用子字符串:

Integer mobId = new Integer(fullMobName.substring(0, fullMobName.indexOf(" "))); 

答案 1 :(得分:4)

只需使用正则表达式。

private final static Pattern p = Pattern.compile("\\d+");

static String firstNum(String s) {
    Matcher m = p.matcher(s);

    return m.find() ? m.group() : null;
}

答案 2 :(得分:3)

您可以在替换方法

中使用正则表达式
   String s = "355 Blaze";
   s.replaceAll("[A-Za-z\\s]+", "");

然后你可以转换为int。

答案 3 :(得分:1)

如果它只包含数字后跟字母(可能有一个可选空格),这也可以起作用:

String ss[] =  original.split("a-zA-Z ]", 2);
//ss[0] contains the numbers

答案 4 :(得分:1)

没有正则表达式(假设数字是正数并且适合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!");