Ich weiß, wie man den Index eines bestimmten Zeichens oder einer bestimmten Zahl in einer Zeichenfolge berechnet, aber gibt es eine vordefinierte Methode, mit der ich mir das Zeichen an der n-ten Position geben kann? Wenn ich also in der Zeichenfolge "foo" nach dem Zeichen mit dem Index 0 frage, wird "f" zurückgegeben.
Hinweis - In der obigen Frage meine ich mit "Zeichen" nicht den Datentyp "Zeichen", sondern einen Buchstaben oder eine Zahl in einer Zeichenfolge. Wichtig hierbei ist, dass ich beim Aufrufen der Methode kein Zeichen erhalte, sondern eine Zeichenfolge (Länge 1). Ich kenne die Methode substring (), habe mich aber gefragt, ob es einen besseren Weg gibt.
char
Wert will ? Und er weiß, wie es geht, willsubstring()
aber nur einen "ordentlicheren" Weg. Zusubstring()
Ihrer Information , ich kann sagen, dass dies der sauberste Weg ist.Character.toString
erfüllt alle notwendigen Anforderungen und ist überhaupt nicht chaotisch.substring()
direkten Verwendung .endIndex
(zweite Parameter) vonString.substring(int, int)
ist ein exklusiver Index und löst keine Ausnahme ausindex + 1
, solangeindex < length()
- was auch für das letzte Zeichen in der Zeichenfolge gilt.Antworten:
Die Methode, die Sie suchen, ist
charAt
. Hier ist ein Beispiel:Weitere Informationen finden Sie in der Java-Dokumentation zu
String.charAt
. Wenn Sie ein anderes einfaches Tutorial möchten, dieses oder dieses .Wenn Sie das Ergebnis nicht als
char
Datentyp, sondern als Zeichenfolge verwenden möchten, verwenden Sie die folgendeCharacter.toString
Methode:Wenn Sie weitere Informationen zur
Character
Klasse und zurtoString
Methode wünschen , habe ich meine Informationen aus der Dokumentation zu Character.toString abgerufen .quelle
Sie wollen
.charAt()
Hier ist ein Tutorial
kehrt zurück
s
Wenn Sie eine Zeichenfolge haben möchten, gibt es verschiedene Möglichkeiten, ein Zeichen in eine Zeichenfolge umzuwandeln:
Oder
Oder auch
Beispielsweise.
quelle
Character.toString
?String mychar = String.valueOf("mystring".charAt(2));
String mychar = ""+"mystring".charAt(2);
weil es am prägnantesten ist. Andere werden sich in ihrer Meinung dazu unterscheiden.Keine der vorgeschlagenen Antworten funktioniert für Ersatzpaare, die zum Codieren von Zeichen außerhalb der mehrsprachigen Unicode-Grundebene verwendet werden .
Hier ist ein Beispiel mit drei verschiedenen Techniken, um die "Zeichen" einer Zeichenfolge zu durchlaufen (einschließlich der Verwendung der Java 8-Stream-API). Bitte beachten Sie, dass dieses Beispiel Zeichen der Unicode Supplementary Multilingual Plane (SMP) enthält. Sie benötigen eine geeignete Schriftart, um dieses Beispiel und das Ergebnis korrekt anzuzeigen.
Iterieren von Zeichen
Die erste Lösung ist eine einfache Schleife über die gesamte
char
Zeichenfolge:Iterieren von Codepunkten
Die zweite Lösung verwendet ebenfalls eine explizite Schleife, greift jedoch mit codePointAt auf einzelne Codepunkte zu und erhöht den Schleifenindex entsprechend auf charCount :
Durchlaufen Sie Codepunkte mithilfe der Stream-API
Die dritte Lösung ist im Grunde die gleiche wie die zweite, verwendet jedoch die Java 8 Stream-API :
Ergebnisse
Wenn Sie dieses Testprogramm ausführen, erhalten Sie:
Wie Sie sehen können (wenn Sie Hieroglyphen richtig anzeigen können), verarbeitet die erste Lösung Zeichen außerhalb des Unicode-BMP nicht richtig. Andererseits können die beiden anderen Lösungen gut mit Ersatzpaaren umgehen.
quelle
Sie sind
substring()
angesichts Ihrer Anforderungen ziemlich festgefahren . Der Standardweg wärecharAt()
, aber Sie sagten, Sie würden keinen char-Datentyp akzeptieren.quelle
toString()
es nicht funktioniert undvalueOf()
nur für Zahlen gilt (ich glaube, ich kann mich irren). Wie konvertiere ich ein char in einen String?char
"Character.toString
sollte funktionieren (es ist eine statische Methode aus derCharacter
Klasse.Sie können das
String.charAt(int index)
Methodenergebnis als Parameter für String.valueOf (char c) verwenden .quelle
Ein hybrider Ansatz, der
charAt
mit Ihrer Anforderung kombiniert wird, kein Zeichen zu erhalten, könnte seinAber das ist nicht wirklich "ordentlicher" als
substring()
um ehrlich zu sein.quelle
Es ist so einfach wie:
quelle
Hier ist der richtige Code. Wenn Sie Zybooks verwenden, werden alle Probleme beantwortet.
quelle
Wenn jemand mit Kotlin zu kämpfen hat, lautet der Code:
Dies gibt das Zeichen an Position 1 zurück. In diesem Fall beginnt k. Denken Sie daran, dass der Index an Position 0 beginnt. In diesem Beispiel wäre kotlin k = Position 0, o = Position 1, t = Position 2, l = Position 3, i = Position 4 und n = Position 5
quelle
So was:
quelle
String
der Länge 1 erwünscht ist, nicht achar
.charAt()
als mögliche Lösung vorgeschlagen. Was fügt diese Antwort hinzu?charAt()
1-basierte Indizes verwendet werden, indem das einzige andere Zeichen ana
dritter Stelle steht. Wenn das wahr wäre, wäre es besser für Sie, das zu sagen oder zu erklären, als darauf hinzuweisen. In Wirklichkeit das ist nicht wahr:charAt()
verwendet 0-basierte Indizes, sos
wird'h'
.