Super detaillierte Erklärung des Java-Strings

Inhaltsverzeichnis

1. API

1.1 API-Übersicht

2. Zeichenfolge

2.1 String-Übersicht

2.2 String-Konstruktor

2.3 Eigenschaften von String-Objekten

2.4 Vergleich von Strings

2.5 Methoden in String

3. StringBuilder

3.1 Überblick über StringBuilder

3.2 Konstruktionsmethode von StringBuilder

 3.3 Addition und Inversion von StringBuilder

3.4 Konvertierung zwischen StringBuilder und String

 3.5 Methoden in StringBuilder

1. API

1.1 API-Übersicht

API (Application Programming Interface): Anwendungsprogrammierschnittstelle. Hierbei handelt es sich um vordefinierte Funktionen , die Anwendungen und Entwicklern die Möglichkeit geben sollen , auf eine Reihe von Routinen basierend auf einer Software oder Hardware zuzugreifen, ohne auf den Quellcode zugreifen oder die Details des Innenlebens verstehen zu müssen .

JavaAPI: bezieht sich auf die verschiedenen funktionalen Java-Klassen, die im JDK bereitgestellt werden. Diese Klassen kapseln die zugrunde liegende Implementierung, und wir müssen uns nicht darum kümmern, wie diese Klassen implementiert werden.

2. Zeichenfolge

2.1 String-Übersicht

Die String-Klasse repräsentiert Strings. Alle String-Literale (z. B. „abc“) in einem Java-Programm werden als Instanzen dieser Klasse implementiert.

Alle in Anführungszeichen gesetzten Zeichenfolgen in einem Java-Programm sind Objekte der String-Klasse

Die String-Klasse befindet sich im Paket java.lang, daher ist es nicht erforderlich, das Paket zu importieren, wenn Sie es verwenden

Saitenmerkmale:

  • Zeichenfolgen sind unveränderlich, ihr Wert kann nach der Erstellung nicht geändert werden
  • Obwohl String-Werte unveränderlich sind, können sie gemeinsam genutzt werden
  • Zeichenfolgen sind praktisch äquivalent zu Zeichenarrays (char[]), aber das zugrunde liegende Prinzip sind Bytearrays (byte[]) (JDK8 und früher sind Zeichenarrays, JDK9 und höher sind Bytearrays)

2.2 String-Konstruktor

Methodenname veranschaulichen
öffentlicher String() Erstellt ein leeres String-Objekt ohne Inhalt
öffentlicher String(char[] chs) Erstellen Sie ein String-Objekt aus dem Inhalt eines Zeichenarrays
öffentlicher String(byte[] bys) Erstellen Sie ein Zeichenobjekt basierend auf dem Inhalt des Byte-Arrays
Zeichenfolge s = „abc“ Erstellen Sie durch direkte Zuweisung ein Zeichenobjekt mit dem Inhalt abc

Zum Beispiel:

public class Demo05 {
	public static void main(String[] args) {
		// public String() 创建一个空白字符串对象,不含有任何内容
		String s1 = new String();
		System.out.println("s1:" + s1); // 无内容

		// public String(char[] chs) 根据字符数组的内容,来创建字符串对象
		char[] c = { 'a', 'b', 'c' };
		String s2 = new String(c);
		System.out.println("s2:" + s2);// abc

		// public String(byte[] bys) 根据字节数组的内容,来创建字符里对象
		byte[] b = { 97, 98, 99 };
		String s3 = new String(b);
		// 97 98 99对应的底层字符分别为a b c 。
		// a b c 三个字符在计算机底层存储的是数据分别为97 98 99的值
		System.out.println("s3:" + s3);// abc

		// String s = “abc" 直接赋值的方式创建字符用对象,内容就是abc
		String s4 = "abc";
		System.out.println("s4:" + s4);// abc
	}
}

Ergebnis:

2.3 Eigenschaften von String-Objekten

1. Für das von new erstellte Zeichenfolgenobjekt gilt für jedes neue ein Speicherplatz. Obwohl der Inhalt derselbe ist, ist der Adresswert unterschiedlich.

char[] chs ={'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);

Im obigen Code erstellt JVM zunächst ein Zeichenarray und gibt dann jedes Mal eine neue Adresse an, aber der von s1 und s2 referenzierte Zeichenfolgeninhalt ist derselbe

2. Solange die in Form von „“ angegebene Zeichenfolge dieselbe ist (Reihenfolge und Groß-/Kleinschreibung), erstellt die JVM unabhängig davon, wie oft sie im Programmcode vorkommt, nur ein String-Objekt und verwaltet es in der Zeichenfolge Schwimmbad

String s3 = "abc";
String s4 = "abc";

Im obigen Code erstellt JVM für die erste Codezeile ein String-Objekt im String-Pool und verweist auf s3, und in der zweiten Zeile verweist s4 direkt auf das String-Objekt im String-Pool, d. h. sie haben im Wesentlichen dasselbe Ziel

2.4 Vergleich von Strings

Verwenden Sie ==, um
Grundtypen zu vergleichen: Vergleichen Sie, ob die Datenwerte gleich sind

Referenztyp: Der Vergleich besteht darin, ob der Adresswert gleich ist

String ist ein Objekt. Es vergleicht, ob der Inhalt derselbe ist. Dies wird durch die Methode equal() realisiert.

public boolean equal(0bject anObject): Vergleicht diese Zeichenfolge mit dem angegebenen Objekt. Da wir String-Objekte vergleichen, übergibt der Parameter direkt einen String

Zum Beispiel:

public class Demo07 {
	public static void main(String[] args) {
		char[] c = { 'a', 'b', 'c' };
		String s1 = new String(c);
		String s2 = new String(c);

		String s3 = "abc";
		String s4 = "abc";

		System.out.println(s1 == s2);
		System.out.println(s1 == s3);
		System.out.println(s3 == s4);
		System.out.println("---------");
		System.out.println(s1.equals(s2));
		System.out.println(s1.equals(s3));
		System.out.println(s3.equals(s4));

	}
}

Ergebnis:

Beispiel 2: Durchlaufen eines Strings

public char charAt(int index): Gibt den char-Wert am angegebenen Index zurück, und der Index der Zeichenfolge beginnt ebenfalls bei 0

Durch Durchlaufen der Zeichenfolge kann zweitens die Länge der Zeichenfolge ermittelt werden

public int length(): gibt die Länge dieser Zeichenfolge zurück

Die Länge des Arrays: Array-Name.Länge
Die Länge der Zeichenfolge: Zeichenfolge Objekt.Länge()

 

import java.util.Scanner;

public class Demo10 {
	public static void main(String[] args) {
		System.out.println("输入字符串");
		Scanner sc = new Scanner(System.in);
		String line = sc.next();
		// 获取字符串的每一个字符
		for (int i = 0; i < line.length(); i++) {
			System.out.print(line.charAt(i) + " ");
		}
	}
}

Ergebnis:

 Beispiel 3: Zählen der Anzahl der Zeichen

import java.util.Scanner;

public class Demo06 {
	public static void main(String[] args) {
		System.out.println("输入字符串");
		Scanner sc = new Scanner(System.in);
		String line = sc.next();
		int a = 0;
		int b = 0;
		int c = 0;
		for (int i = 0; i < line.length(); i++) {
			if (line.charAt(i) >= '0' && line.charAt(i) <= '9') {
				a++;
			} else if (line.charAt(i) >= 'a' && line.charAt(i) <= 'z') {
				b++;
			} else if (line.charAt(i) >= 'A' && line.charAt(i) <= 'Z') {
				c++;
			}
		}
		System.out.println("数字有" + a + "位");
		System.out.println("小写字母有" + b + "位");
		System.out.println("大写字母有" + c + "位");
	}
}

Ergebnis:

 Beispiel 4: Strings verketten

public class Demo08 {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
		ToString(arr);
	}

	public static void ToString(int[] arr) {
		System.out.print("[");
		for (int i = 0; i < arr.length; i++) {
			if (i == arr.length - 1) {
				System.out.print(arr[i]);
			} else {
				System.out.print(arr[i] + ",");
			}
		}
		System.out.println("]");
	}
}

Ergebnis:

 Beispiel 5: String-Umkehr

import java.util.Scanner;

public class Demo09 {
	public static void main(String[] args) {
		System.out.println("输入字符串");
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		for (int i = s.length() - 1; i >= 0; i--) {
			System.out.print(s.charAt(i)+" ");
		}
	}
}

Ergebnis:

2.5 Methoden in String

Methodenname veranschaulichen
öffentlicher boolescher Wert gleicht (Objekt und Objekt) Vergleichen Sie den Inhalt von Zeichenfolgen unter strikter Berücksichtigung der Groß- und Kleinschreibung (Benutzername und Passwort).
öffentliches Zeichen charAt(int index) Gibt den char-Wert am angegebenen Index zurück
öffentliche int-Länge() Gibt die Länge dieser Zeichenfolge zurück

3. StringBuilder

3.1 Überblick über StringBuilder

Wenn Zeichenfolgen verkettet werden, wird bei jeder Verkettung ein neues String-Objekt erstellt, was zeitaufwändig ist und Speicherplatz verschwendet, und dieser Vorgang ist unvermeidlich. Gibt es also einen besseren Weg, dieses Problem zu lösen? Die Antwort lautet: Ja, wir können dieses Problem durch die von Java bereitgestellte StringBuilder-Klasse lösen.

StringBuilder ist eine variable String-Klasse. Wir können sie als Container betrachten. Die Variable bedeutet hier, dass der Inhalt im StringBuilder-Objekt variabel ist.

Der Unterschied zwischen String und StringBuilder

  • String: Der Inhalt ist unveränderlich
  • StringBuilder: Der Inhalt ist veränderbar

3.2 Konstruktionsmethode von StringBuilder

Methodenname veranschaulichen
öffentlicher StringBuilder() Erstellt ein leeres veränderbares Zeichenfolgenobjekt ohne Inhalt
öffentlicher StringBuilder(String str) Erstellen Sie veränderbare String-Objekte basierend auf dem Inhalt des Strings

 Zum Beispiel:

public class Demo11 {
	public static void main(String[] args) {
		// public StringBuilder() 创建一个空白可变字符串对象,不含有任何内容
		StringBuilder s = new StringBuilder();
		System.out.println("s:" + s);
		System.out.println("s.length()" + s.length());// 长度
		// public StringBuilder(String str) 根据字符串的内容,来创建可变字符串对象
		StringBuilder s1 = new StringBuilder("abc");
		System.out.println("s1:" + s1);
		System.out.println("s1.length()" + s1.length());// 长度

	}
}

Ergebnis:

 3.3 Addition und Inversion von StringBuilder

Methodenname veranschaulichen
öffentliches StringBuilder-Anhängen (beliebiger Typ) Fügen Sie Daten hinzu und geben Sie das Objekt selbst zurück
öffentlicher StringBuilder reverse() gibt die umgekehrte Zeichenfolge zurück

Zum Beispiel:

public class Demo12 {
	public static void main(String[] args) {
		// public StringBuilder append(任意类型) 添加数据,并返回对象本身
		StringBuilder s = new StringBuilder();
		StringBuilder ss = new StringBuilder();
		// StringBuilder s2 = s.append("abcd");
		// System.out.println("s:" + s);
		// System.out.println("s2:" + s2);//s2:abcd
		// System.out.println("--------");
		s.append("abc");
		s.append("def");
		s.append("ghi");
		s.append(123456);
		System.out.println(s);
		System.out.println("--------");
		// 链式编程
		ss.append("abc").append("def").append("ghi").append(123456);
		System.out.println(ss);
		System.out.println("-----------");

		// public StringBuilder reverse() 返回相反的字符序列
		s.reverse();
		ss.reverse();
		System.out.println(s);
		System.out.println(ss);

	}
}

Ergebnis:

3.4 Konvertierung zwischen StringBuilder und String

1. Konvertieren Sie StringBuilder in String
public String toString(): Konvertieren Sie StringBuilder in String über toString()
2. Konvertieren Sie String in StringBuilder:

public StringBuilder(String s): Konvertieren Sie String über die Konstruktionsmethode in StringBuilder

Zum Beispiel:

public class Demo14 {
	public static void main(String[] args) {
		// 1.StringBuilder转换为 String
		StringBuilder s = new StringBuilder();
		s.append("hello");
		String st = s.toString();
		System.out.println(st);

		// 2.String 转换为 StringBuilder:
		String st2 = "hello123";
		StringBuilder s2 = new StringBuilder(st2);
		System.out.println(s2);
	}
}

Ergebnis:

 Beispiel 1: Zeichenfolgen verketten

public class Demo15 {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3 };
		String s = ToStirng(arr);
		System.out.println(s);
	}

	public static String ToStirng(int[] arr) {
		StringBuilder sb = new StringBuilder();
		sb.append("[");
		for (int i = 0; i < arr.length; i++) {
			if (i == arr.length - 1) {
				sb.append(arr[i]);
			} else {
				sb.append(arr[i]).append(",");
			}
		}
		sb.append("]");
		String s = sb.toString();
		return s;
	}
}

Ergebnis:

Beispiel 2: String-Umkehr

public class Demo13 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("输入字符串");
		String line = sc.next();
		String s = info(line);
		System.out.println(s);
	}

	public static String info(String s) {
		// StringBuilder sb=new StringBuilder();
		// sb.reverse();
		// String ss = sb.toString();
		// return ss;
		return new StringBuilder(s).reverse().toString();
	}
}

Ergebnis:

 3.5 Methoden in StringBuilder

Methodenname veranschaulichen
öffentliches StringBuilder-Anhängen (beliebiger Typ) Fügen Sie Daten hinzu und geben Sie das Objekt selbst zurück
öffentlicher StringBuilder reverse() gibt die umgekehrte Zeichenfolge zurück
öffentlicher String toString() Konvertieren Sie StringBuilder in String mit toString()

Ich denke du magst

Origin blog.csdn.net/m0_52896041/article/details/132120266
Empfohlen
Rangfolge