2016-04-22 9 views
0

Also zuerst möchte ich klarstellen, dass dies für ein Minecraft-Plugin ist. Also habe ich eine Methode, um einige Mobs zu spawnen (Sie wissen nicht, was Mobs sind), und geben Sie ihnen benutzerdefinierte Namen. Die Namen basieren auf Zahlen. Aber ich habe auch eine Abfolge von Zeichen in seinem Namen. Wenn zum Beispiel der Name für den Mob "355 Blaze" wäre, würde er einen Int von 355 zurückgeben und den Rest ausschneiden. Wie soll ich das machen? Momentan benutze ich Teilzeichenfolge, aber es funktioniert nicht, als ob die Zahl über 9 geht, es wird nur die erste Zahl zurückgegeben.Finden Sie die erste Folge von Zahlen in einer Zeichenfolge?

+0

Wenn es nur die erste Ziffer ist die Rückkehr, sind Sie die falschen Parameter für 'substring' verwenden. – fabian

Antwort

6

Wenn seine getrennt durch Leerzeichen, Verwendung String auf den Standort des ersten Raumes basiert:

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

Danke das hat mein Problem gelöst und funktioniert super. –

2

einfach einen regulären Ausdruck verwenden.

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

Wenn es nur durch Buchstaben (mit möglicherweise einem optionalen Leerzeichen) gefolgt Ziffern enthält, wird dies auch funktionieren:

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

Nein, eine ungültige Regex wird sicherlich nicht funktionieren ... – fabian

1

Sie einen regulären Ausdruck verwenden können in Verfahren

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

Dann können Sie zu int.

1

es ohne regex tun (positive die Zahl unter der Annahme und paßt in einem 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!");