2016-04-22 137 views
0

所以首先我想說明一下這是Minecraft插件。所以我有一種方法來產生一些小怪(你不知道它是什麼小怪),並給他們定製名字。名稱基於數字。但我的名字也有一系列的字符。例如,如果這個暴徒的名字是「355 Blaze」,那麼它將返回一個355的整數,並將其餘部分刪除。我應該怎麼做?目前我使用子字符串,但它不起作用,如果數字超過9,它將只返回第一個數字。在字符串中查找第一個數字序列?

+0

如果它返回的第一個數字而已,您使用的是'substring'了錯誤的參數。 – fabian

回答

6

如果其通過空間分離,使用基於對第一空間位置的子串:

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

謝謝你解決了我的問題,效果很好。 –

2

只需使用一個正則表達式。

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

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

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

如果只包含數字後跟字母(與可能的可選空間),這也將工作:

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

不,使用無效的正則表達式當然不會工作... – fabian

1

您可以使用正則表達式表達的替代方法

String s = "355 Blaze"; 
    s.replaceAll("[A-Za-z\\s]+", ""); 

然後你可以投射到int。

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!"); 
相關問題