2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Ich glaube, ihr seid beim Erlernen der C-Sprache mit Strings in Kontakt gekommen, aber in der C-Sprache kann man sie nur verwenden
Zeichenarray char[10] str = „hello“; oder Zeichenzeiger char *str = „hello“;Es wird keine dedizierte String-Klasse bereitgestellt . In objektorientiertem Java werden die String-Klasse und ihre Operationen speziell bereitgestellt, was für unsere Programmierer bequemer zu verwenden ist.
Der Inhalt der Zeichenfolge kann nicht geändert werden.
In String erzeugen alle Vorgänge, die die Möglichkeit beinhalten, den Inhalt der Zeichenfolge zu ändern, ein neues Objekt, und was geändert wird, ist das neue Objekt.
Wenn Sie beispielsweise nach Teilzeichenfolgen suchen:
Manche Leute sagen: Strings sind unveränderlich, weil das Array, in dem die darin enthaltenen Zeichen gespeichert sind, von final geändert wird und daher nicht geändert werden kann.
public static void main(String[] args) {
final char[] arr = {'h','e','l','l','o'};
arr[0] = 'H';
System.out.println(String.valueOf(arr));//Hello
// arr = new char[]{'h','o'};Error
}
String ist ein Referenzdatentyp und speichert nicht den String selbst.
public class Test {
public static void main(String[] args) {
//1.直接赋值
String s1 = "first";
//2.new 对象
String s2 = new String("second");
//3. 创建字符数组
char[] arr = {'t','h','i','r','d'};
String s3 = new String(arr);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
Beachten:
Zeichenfolge s1 = „erste“;
Die Java Virtual Machine (JVM) prüft zunächst, ob die Zeichenfolge „first“ bereits im String-Konstantenpool vorhanden ist. Wenn sie vorhanden ist, wird die Referenz der Zeichenfolge im Konstantenpool direkt zurückgegeben. Wenn sie nicht vorhanden ist, wird die Zeichenfolge zum Konstantenpool hinzugefügt und ihre Referenz im Konstantenpool zurückgegeben.
//s1 s2 分别是new 一个新的字符串"hello"
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = "Hello";
String s4 = s1;
System.out.println(s1 == s2);//false
System.out.println(s1 == s4);//true
System.out.println(s1 == s3);//false
//因为Object类中的equals()方法是==实现的,完成不了String类的需求,
//所以String对equals()实现了重写
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = "Hello";
String s4 = s1;
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s4));//true
System.out.println(s1.equals(s3));//false
3. CompareTo() vergleicht in lexikografischer Reihenfolge, der Rückgabewert ist int
/*
* 比较的方式有一下两种:
* 1.先一个一个字符相比较,如果出现不同的字符,则返回差值
* 2.如果前x个字符相等,则返回两个字符串的长度差值
* */
String s1 = new String("abc");
String s2 = new String("abcdef");
String s3 = new String("abd");
String s4 = new String("abc");
System.out.println(s1.compareTo(s2));//-3 (3-6)
System.out.println(s1.compareTo(s3));//-1
System.out.println(s1.compareTo(s4));//0
String s1 = new String("Abc");
String s2 = new String("aBcdef");
String s3 = new String("aBd");
String s4 = new String("ABc");
System.out.println(s1.compareToIgnoreCase(s2));//-3 (3-6)
System.out.println(s1.compareToIgnoreCase(s3));//-1
System.out.println(s1.compareToIgnoreCase(s4));//0
Methode | Funktion |
---|---|
char charAt(int index) | Gibt das Zeichen an der Indexposition zurück. Wenn der Index negativ ist oder außerhalb der Grenzen liegt, wird eine IndexOutOfBoundsException-Ausnahme ausgelöst. |
int indexOf(int ch) | Gibt die Position zurück, an der ch zum ersten Mal erscheint, ohne -1 zurückzugeben |
int indexOf(int ch, intfromIndex) | Beginnen Sie an der fromIndex-Position, um die Position zu finden, an der ch zum ersten Mal erscheint, und geben Sie -1 zurück |
int indexOf(String str) | Gibt die Position zurück, an der str zum ersten Mal erscheint, ohne -1 zurückzugeben |
int indexOf(String str, intfromIndex) | Suchen Sie das erste Vorkommen von str ausgehend von der fromIndex-Position, ohne -1 zurückzugeben |
int letzterIndexVon(int ch) | Suchen Sie von hinten nach vorne und kehren Sie zu der Position zurück, an der ch zuerst erscheint. Wenn nicht, geben Sie -1 zurück |
int letzterIndexVon(int ch, intvonIndex) | Beginnen Sie mit der Suche ab der fromIndex-Position und suchen Sie von hinten nach vorne nach der Position, an der ch zum ersten Mal erscheint. -1 wird nicht zurückgegeben. |
int letzterIndexVon(String str) | Suchen Sie von hinten nach vorne und geben Sie die Position zurück, an der str zuerst erscheint. -1 wird nicht zurückgegeben. |
int letzterIndexVon(String str, intfromIndex) | Beginnen Sie mit der Suche an der fromIndex-Position und suchen Sie von hinten nach vorne nach der Position, an der str Nr. -1 zurückgegeben wird. |
public static void main(String[] args) {
String s = "Hello, how are you today?";
System.out.println(s.charAt(2)); //l
System.out.println(s.indexOf('H')); //0
System.out.println(s.indexOf('l',2)); //从第二个开始找 2
System.out.println(s.indexOf("are")); //11
System.out.println(s.indexOf("are",12)); // 未找到-1
System.out.println(s.lastIndexOf('l')); //从后往前数 3
System.out.println(s.lastIndexOf('l',3));// 从第三个往后数 3
System.out.println(s.lastIndexOf("how"));// 7
System.out.println(s.lastIndexOf("how",6));// 未找到 -1
}
1. Konvertierung von Zahlen und Zeichenfolgen
String s1 = String.valueOf(1234);
String s2 = String.valueOf(12.34);
String s3 = String.valueOf(true);
String s4 = String.valueOf(new Student("Hanmeimei", 18));
System.out.println(s1);//1234 String
System.out.println(s2);//12.34 String
System.out.println(s3);//true String
System.out.println(s4);//Student@1b6d3586
System.out.println("=================================");
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");
System.out.println(data1);//1234
System.out.println(data2);//12.34
2. Fallkonvertierung
String s1 = "hello";
String s2 = "HELLO";
System.out.println(s1.toUpperCase());//HELLO
System.out.println(s1.toLowerCase());//hello
3. String in Zeichen-Array und Zeichen-Array in String
//字符串转字符数组
String s = "What can I say!";
char[] arr = s.toCharArray();
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println();
//字符数组转字符串
String s1 = new String(arr);
System.out.println(s1);
4.Formatierung
//格式化
String s = String.format("%d/%02d/%d",2024,07,10);
System.out.println(s);//2024/07/10
Methode | Funktion |
---|---|
String replaceAll(String regulärer Ausdruck, String-Ersetzung) | Ersetzen Sie alle angegebenen Inhalte |
String replaceFirst(String regulärer Ausdruck, String-Ersetzung) | Ersetzen Sie den ersten Inhalt |
String s = "What can I say say!";
System.out.println(s.replaceAll("say","look"));
System.out.println(s.replaceFirst("say","SAY"));
//What can I look look!
//What can I SAY say!
Methode | Funktion |
---|---|
String[] teilen(String regulärer Ausdruck) | Alle Saiten aufteilen |
String[] split(String regulärer Ausdruck, int Grenze) | Teilen Sie die Zeichenfolge im angegebenen Format in Grenzgruppen auf |
//字符串拆分
String s = "字 符 串 拆 分";
String[] str = s.split(" ");
for(String i : str) {
System.out.print(i+"|");
}
System.out.println();
String[] str2 = s.split(" ",2);
for(String i : str2) {
System.out.println(i);
}
/*
* 输出:
字|符|串|拆|分|
字
符 串 拆 分
* */
/*
*拆分是特别常用的操作:
* 一定要重点掌握
*另外有些特殊字符(通配符)作为分割符可能无法正确切分, 需要加上转义.
* */
String s2 = "192.168.1.16" ;
String[] result = s2.split("\.") ;
for(String i: result) {
System.out.println(i);
}
System.out.println("\");
//为了匹配字面上的点号,你需要使用反斜杠()来转义它,
// 但在Java字符串中,反斜杠本身也是一个转义字符,
// 所以你需要使用双反斜杠(\)来表示一个字面量上的反斜杠。
//字符串截取
String s = "What can I say!";
System.out.println(s.substring(6));//an I say!
System.out.println(s.substring(0,3));//What
String s = " yy ds ";
System.out.println(s.trim());//yy ds
Die String-Klasse kann nicht geändert werden. Bei allen Änderungen werden neue Objekte erstellt, was nicht effizient ist.
Dies sind nur 10000, was 341 ms entspricht. Wenn Sie es ändern möchten, wird empfohlen, StringBuffer oder StringBuilder zu verwenden.
Aufgrund der Unveränderlichkeit von String stellt Java zur Erleichterung der Änderung von Zeichenfolgen auch die Klassen StringBuilder und StringBuffer bereit. Und die meisten Methoden dieser beiden Klassen sind gleich.
Bei Interesse klicken Sie bitteOnline-Dokumentation
1 ms nach Verwendung von StringBuffer.
Hinweis: String- und StringBuilder-Klassen können nicht direkt konvertiert werden. Wenn Sie sich gegenseitig konvertieren möchten, können Sie die folgenden Prinzipien verwenden:
Die sogenannte Thread-Sicherheit ist so, als ob mehrere Personen zu diesem Zeitpunkt auf die Toilette gehen. Sie gehen zuerst hinein, schließen die Tür und kommen wieder heraus, wenn Sie fertig sind. Während dieser Zeit haben Sie diesen Raum für sich allein und niemand kann ihn betreten. Schließen Sie zuerst die aktuelle Aufgabe ab, monopolisieren Sie die Ressourcen und geben Sie nach Abschluss die belegten Ressourcen frei.