In diesem Artikel werden die 10 häufigsten Fragen zu String in Java vorgestellt:
1. Sollten Sie für den String-Vergleich „==“ oder „equals()“ verwenden?
Einfach ausgedrückt bestimmt „==“, ob zwei Referenzen auf dieselbe Speicheradresse (dasselbe physische Objekt) verweisen.
Und gleich bestimmt, ob die Werte zweier Zeichenfolgen gleich sind.
Sofern Sie nicht feststellen möchten, ob zwei String-Referenzen dasselbe Objekt sind, sollten Sie immer die Methode equal() verwenden.
Sie werden dieses Problem besser verstehen, wenn Sie sich mit String-Internierung auskennen
2. Warum ist es für vertrauliche Informationen besser, char[] als String zu verwenden?
String ist ein unveränderliches Objekt, was bedeutet, dass das gesamte Objekt nach seiner Erstellung nicht geändert werden kann. Selbst wenn ein Anfänger denkt, dass sich die String-Referenz geändert hat, handelt es sich tatsächlich nur um eine (Zeiger-)Referenz, die auf ein anderes (neues) Objekt zeigt.
Programmierer können das Zeichenarray explizit ändern, sodass vertrauliche Informationen (z. B. Passwörter) nicht leicht an anderer Stelle preisgegeben werden (sofern Sie char[] nach der Verwendung auf 0 setzen).
3. String als Case-Bedingung in der Switch-Anweisung verwenden?
Ab JDK7 ist dies möglich. Java 6 und frühere Versionen unterstützen dies übrigens nicht.
Kopieren Sie den Codecode wie folgt:
// Nur gültig in Java 7 und höher!
switch (str.toLowerCase()) {
Fall „a“:
Wert = 1;
brechen;
Fall „b“:
Wert = 2;
brechen;
}
4. Konvertieren Sie String in Zahl
Für sehr große Zahlen verwenden Sie bitte Long. Der Code lautet wie folgt
Kopieren Sie den Codecode wie folgt:
int age = Integer.parseInt("10");
long id = Long.parseLong("190"); // Wenn der Wert groß sein kann.
5. So teilen Sie eine Zeichenfolge durch Leerzeichen auf
Der von der Methode split() von String empfangene String wird als regulärer Ausdruck analysiert.
„/s“ stellt Leerzeichen dar, z. B. Leerzeichen „“, Tab „/t“, Zeilenvorschub „/n“, Wagenrücklauf „/r“.
Wenn der Compiler den Quellcode analysiert, führt er auch eine wörtliche Transkodierung durch, daher ist „//s“ erforderlich.
Kopieren Sie den Codecode wie folgt:
String[] strArray = aString.split("//s+");
6. Wie wird die Methode substring() intern verarbeitet?
In JDK6 teilt die Methode substring() immer noch das ursprüngliche Array char[] und erstellt einen „neuen“ String durch Offset und Länge.
Wenn Sie möchten, dass substring() ein neu erstelltes Objekt erhält, verwenden Sie die folgende Methode:
Kopieren Sie den Codecode wie folgt:
String sub = str.substring(start, end) + "";
Natürlich erstellt substring() in Java 7 ein neues char[]-Array, anstatt es freizugeben.
Weitere Informationen finden Sie unter: substring()-Methode und ihre Unterschiede in JDK6 und JDK7
7. String vs. StringBuilder vs. StringBuffer
StringBuilder ist veränderbar, sodass die internen Werte nach der Erstellung geändert werden können.
StringBuffer ist synchronisiert und daher threadsicher, aber relativ weniger effizient.
8. Wie kann man dieselbe Saite wiederholt verbinden?
Option 1: Verwenden Sie die Dienstprogrammklasse StringUtils der Apache Commons Lang-Bibliothek.
Kopieren Sie den Codecode wie folgt:
String str = "abcd";
String wiederholt = StringUtils.repeat(str,3);//abcdabcdabcd
Option 2:
Verwenden Sie den StringBuilder-Konstruktor.
Kopieren Sie den Codecode wie folgt:
String src = "name";
int len = src.length();
int Wiederholung = 5;
StringBuilder builder = new StringBuilder(len * repeat);
for(int i=0; i<repeat; i++){
builder.append(src);
}
String dst = builder.toString();
9. Wie konvertiere ich einen String in ein Datum?
Kopieren Sie den Codecode wie folgt:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String str = "2013-11-07";
Datum date = format.parse(str);
System.out.println(format.format(date));//2013-11-07
10. Wie zählt man die Häufigkeit des Vorkommens eines bestimmten Zeichens?
Außerdem wird die StringUtils-Klasse der Apache Commons Lang-Bibliothek verwendet:
Kopieren Sie den Codecode wie folgt:
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);