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?
Antwort
Wenn seine getrennt durch Leerzeichen, Verwendung String auf den Standort des ersten Raumes basiert:
Integer mobId = new Integer(fullMobName.substring(0, fullMobName.indexOf(" ")));
Danke das hat mein Problem gelöst und funktioniert super. –
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;
}
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
Nein, eine ungültige Regex wird sicherlich nicht funktionieren ... – fabian
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.
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!");
Wenn es nur die erste Ziffer ist die Rückkehr, sind Sie die falschen Parameter für 'substring' verwenden. – fabian