2013-03-06 10 views
29

Ich versuche, die letzten drei Zeichen einer Zeichenfolge zu nehmen und speichern Sie es als eine andere Zeichenfolge-Variable. Ich habe eine harte Zeit mit meinem Gedankenprozess.Holen Sie sich die letzten drei Zeichen aus einer beliebigen Zeichenfolge - Java

String word = "onetwotwoone" 
int length = word.length(); 
String new_word = id.getChars(length-3, length, buffer, index); 

Ich weiß nicht, wie Sie die getChars-Methode verwenden, wenn es um Puffer oder Index geht. Eclipse bringt mich dazu, die da drin zu haben. Irgendwelche Vorschläge?

+0

Der Puffer ist ein 'char []', wo die Zeichen gehen, und index ist der Anfang des Arrays, wo Sie die Kopie starten wollen. Erstellen Sie einfach ein char [] der Größe 3 und setzen Sie den Index auf 0. Obwohl Teilstring wäre wahrscheinlich besser –

+0

stimmen mit Mark in char [] (String.toCharArray() und dann zuletzt drucken 3) – amitmah

Antwort

106

Warum nicht einfach String substr = word.substring(word.length() - 3)?

aktualisieren

Bitte stellen Sie sicher, dass Sie prüfen, ob die String mindestens 3 Zeichen vor substring() Aufruf lang ist:

if (word.length() == 3) { 
    return word; 
} else if (word.length() > 3) { 
    return word.substring(word.length() - 3); 
} else { 
    // whatever is appropriate in this case 
    throw new IllegalArgumentException("word has less than 3 characters!"); 
} 
+0

Muss vorsichtig mit Strings sein Mit weniger als drei Zeichen glaube ich, dass negative Eingaben die ursprüngliche Zeichenkette zurückgeben (könnte falsch sein), was für das, was sie zu erreichen versuchen, akzeptabel ist oder nicht. – celestialorb

+1

@celestialorb: Ein negativer Index verursacht laut [docs] eine Ausnahme (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring%28int%29). – MvG

+0

@celestialorb, Danke für die Erwähnung, sowieso muss der ursprüngliche Code aus der Frage auch Ausnahmen behandeln, also habe ich nicht über dieses Problem nachgedacht. – Egor

1

String newString = originalString.substring(originalString.length()-3);

+0

@MvG: Aktualisierte Antwort.Ja war ein Tippfehler – Cratylus

0

Verfahren getChars Zeichenfolge Wert nicht zurück Stattdessen wird das Ergebnis in das Puffer- (oder Ziel-) Array geschrieben. Der Indexparameter beschreibt den Startoffset in Ihrem Zielarray. Geben Sie link für eine ausführlichere Beschreibung der getChars Methode ein

Ich stimme den anderen hier zu, ich denke, Teilstring wäre ein besserer Weg, um mit dem fertig zu werden, was Sie erreichen wollen.

0

können Sie einen Teil verwenden

String word = "onetwotwoone" 
int lenght = word.length 
String numbers = word.substring(word.length() - 3); 
+0

es sollte 'word.length()' sein – Shardul

3
public String getLastThree(String myString) { 
    if(myString.length() > 3) 
     return myString.substring(myString.length()-3); 
    else 
     return myString; 
} 
1

Wenn Sie die String der letzten drei Zeichen bestehen wollen, können Sie substring(int) verwenden:

String new_word = word.substring(word.length() - 3); 

Wenn Sie tatsächlich sie als wollen Zeichen-Array, sollten Sie schreiben

char[] buffer = new char[3]; 
int length = word.length(); 
word.getChars(length - 3, length, buffer, 0); 

Die ersten beiden Argumente zu getChars bezeichnen den Teil der Zeichenfolge, den Sie extrahieren möchten. Das dritte Argument ist das Array, in das dieser Teil eingefügt wird. Und das letzte Argument gibt die Position im Puffer an, an der die Operation beginnt.

Wenn die Zeichenfolge weniger als drei Zeichen enthält, erhalten Sie in beiden Fällen eine Ausnahme, daher sollten Sie nachsehen.

12

Hier einige lapidare Code, der die Arbeit mit regex tut:

String last3 = str.replaceAll(".*?(.?.?.?)?$", "$1"); 

Dieser Code gibt bis zu 3; Wenn es weniger als 3 gibt, gibt es nur die Zeichenfolge zurück.

Dies ist, wie es in einer Zeile ohne regex sicher zu tun:

String last3 = str == null || str.length() < 3 ? 
    str : str.substring(str.length() - 3); 

von „sicher“, ich meine, ohne eine Ausnahme auszulösen, wenn die Zeichenfolge Nullen oder kürzer als 3 Zeichen ist (die ganze andere Antworten sind nicht "sicher".


Der obige Code ist in der Tat auf diesen Code identisch, wenn Sie eine ausführlichere bevorzugen, aber möglicherweise einfacher zu lesende Form:

String last3; 
if (str == null || str.length() < 3) { 
    last3 = str; 
} else { 
    last3 = str.substring(str.length() - 3); 
} 
+0

Möglich, aber ziemlich schwierig, mit seinem ternären Operator und dem Fehlen von Klammern zu verstehen. Deshalb würde ich hier davon abraten. -1. – MvG

+1

@MvG so ist diese Antwort "nicht hilfreich"? (Das bedeutet eine Stimme von -1). Warum ist die Verwendung der ternären Syntax nicht hilfreich? Und wo würdest du Klammern setzen? Im Gegenteil, ich denke, diese Antwort ist hilfreich, vor allem wenn man bedenkt, dass alle anderen explodieren würden, wenn sie eine Null oder eine kurze Eingabe erhalten. – Bohemian

+0

Nicht hilfreich, weil ich glaube (es tut mir leid, wenn ich falsch liege), dass die meisten Benutzer, die mit dem Extrahieren einer Teilzeichenfolge aus einer gegebenen Zeichenfolge kämpfen, über ihren Kopf hinweg versuchen werden, Ihren Code zu lesen. Die Überprüfung der Länge ist alles sehr gut, aber auf dieser Ebene würde ich ausführlichere Lösungen für hilfreich halten und kryptische Lösungen nur verwirrend. Zu Klammern: Ich würde das schreiben ... = ((... || ...)? ...: ...) '. Die Zeilenumbruch, die Sie hinzugefügt haben, macht die Dinge auch viel besser. – MvG

6

I right Methode von StringUtils Klasse betrachten würde aus Apache Commons Lang: http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#right(java.lang.String,%20int)

Es ist sicher. Sie werden nicht NullPointerException oder StringIndexOutOfBoundsException erhalten.

Beispiel Nutzung:

StringUtils.right("abcdef", 3)

Sie können weitere Beispiele unter dem obigen Link.

+0

In Android ist diese Funktion nicht vorhanden – Pranaysharma

+2

Dies sollte die richtige Antwort sein! – hackingforgirls

Verwandte Themen