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