2010-08-24 1 views
9

Ich habe eine Zeichenfolge, sagen wir "600sp", von dem ich den ganzzahligen Teil (600) erhalten möchte.Der beste Weg, einen ganzzahligen Teil der Zeichenkette "600sp" zu erhalten?

Wenn ich Integer.valueOf("600sp") mache, erhalte ich eine Ausnahme wegen des nicht numerischen Wertes "s", der in der Zeichenfolge angetroffen wird.

Was ist der schnellste sauberste Weg, um den ganzzahligen Teil zu greifen?

Danke!

+2

Wird der numerische Teil garantiert zuerst angezeigt? ist es immer eine dreistellige Zahl? –

+0

Ja, es ist immer eine variable Länge gefolgt von sp. –

Antwort

13

Wenn Ihr String-Format immer die Nummer von einigen Zeichen gefolgt sein wird, dann versuchen, diese

mystr.split("[a-z]")[0] 
+0

kurz und süß, perfekt - danke. –

+0

coole Lösung! – stratwine

+0

Dies stürzt ab, wenn eine leere Zeichenfolge eingegeben wird, und kann zu ungültigen Ergebnissen führen, wenn eine Zeichenfolge mit internationalen Zeichen – Jherico

1

können Sie

Integer.valueOf("0" + "600sp".replaceAll("(\\d*).*", "$1")) 

verwenden Hinweis:

Mit dieser regex Sie nur die ersten Zahlen halten.


Edit: Die "0" + verwendet wird, um nicht abstürzen, wenn ich keine Stellen haben. Tks @ Jherico!

+0

Dies stürzt ab, wenn die Zeichenfolge keine Ziffern enthält. – Jherico

+0

@jherico: tks! Ich werde es reparieren. – Topera

6

Abhängig von den Einschränkungen Ihrer Eingabe, können Sie mit regex am besten umgehen.

Pattern p = Pattern.compile("(\\d+)"); 
    Matcher m = p.matcher("600sp"); 
    Integer j = null; 
    if (m.find()) { 
     j = Integer.valueOf(m.group(1)); 
    } 

Dieser reguläre Ausdruck übersetzt ‚Gib mir den Satz von zusammenhängenden Ziffern am Anfang des Strings, wo es mindestens 1 Stelle ist‘. Wenn Sie andere Einschränkungen haben, wie das Analysieren von reellen Zahlen im Gegensatz zu Ganzzahlen, müssen Sie den Code ändern.

2

Für eine kürzere und weniger spezifische Lösung fügen Sie mehr Kontext hinzu.

StringBuffer numbers = new StringBuffer(); 
for(char c : "asdf600sp".toCharArray()) 
{ 
    if(Character.isDigit(c)) numbers.append(c); 
} 

System.out.println(numbers.toString()); 

Im Lichte der neuen Informationen, eine verbesserte Lösung:

Integer.valueOf("600sp".replace("sp","")); 
1

Wenn die Zeichenfolge garantiert (wie Sie sagen) eine Ganzzahl gefolgt von "sp" ist, rate ich von der Verwendung eines allgemeineren regulären Ausdrucksparsers ab, der auch andere Variationen (die reje sein sollten) akzeptiert als Fehler).

Testen Sie einfach, ob es in "SP" endet, und analysieren Sie dann die Teilzeichenfolge ohne die letzten beiden Zeichen.

+0

Das ist ein sehr guter Punkt. Danke Thilo. –

2

Ich weiß, dass dies bereits beantwortet wurde, aber haben Sie in Betracht gezogen java.util.Scanner? Es scheint die Rechnung perfekt ohne Regex oder andere komplexere String-Dienstprogramme zu passen.