文字列の処理は、多くのプログラミング言語で非常に重要です。これは、インタビューでもよく聞かれます。しっかりと把握していないと、答えに失敗しがちです。
Java文字列
Javaでは、これString
は参照型です。ただし、文字列はJavaプログラミングで広く使用されているため、Javaコンパイラは文字列を処理し、2つ"
を直接使用して文字列を表すことができます。
// 我们通常的做法
String s = "Hello World!";
// 下面这种写法也可以
String s = new String("Hello World!");
// 还可以这样写 String内部是通过一个char[]表示的
String s = new String(new char[] {
'H', 'e', 'l', 'l', 'o', '!'});
Java文字列の重要な機能は、文字列が不変(コンテンツ)であることです。
- 宣言された文字列変数は変更可能です
- 文字列自体は不変です
String s1 = "Hello"; // 此时有一块内存存着"Hello", 且可通过s1访问它
s1 = "World"; // 此时有一块内存存着"Hello", 还有一块内存存着"World", 通过s1只能找到"World", "Hello"并未改变
ここでは、簡単なスタックメモリ分析を見ることができます
Java文字列操作
文字列の比較
信頼性の低いequals()
メソッドしか使用できませ==
ん。
例えば
String s1 = "Hello";
String s2 = "Hello";
String s3 = "World";
String s4 = "wOrLd";
System.out.println(s1.equals(s2)); // true
System.out.println(s3.equals(s4)); // false
System.out.println(s3.equalsIgnoreCase(s4)); // true
部分文字列検索または検索
indexOf()
左から右に部分文字列を見つけて、添え字を返しますlastIndexOf()
右から左に部分文字列を見つけて、添え字を返しますcontains()
特定の部分文字列を含めるかどうかを決定するstartWith()
特定の部分文字列で開始するかどうかを決定しますendWith()
特定の部分文字列で終了するかどうかを決定します
String s1 = "Are you ok ?";
System.out.println(s1.indexOf("o"));
System.out.println(s1.lastIndexOf('o'));
System.out.println(s1.contains("you"));
System.out.println(s1.startsWith("are"));
System.out.println(s1.endsWith(" ?"));
// 输出:
// 5
// 8
// true
// false
// true
ストリングスプライシング
+
スプライシング
出力時に+
は、文字列と数値のスプライシング出力を直接使用できます。
String s1 = "Hello";
int n1 = 8848;
float f1 = 10.24f;
boolean b1 = false;
System.out.println(s1 + n1 + f1+ b1);
// 输出:
// Hello884810.24false
文字列間の+
スプライシングを使用する
String s1 = "Hello";
String s2 = "World";
String s3 = s1 + ' ' + s2; // s3 = "Hello World"
- 静的メソッド
join()
:文字列を使用して文字列の配列を連結します
String[] sArr = {
"Hello", "Hi", "Bye"};
String s = String.join("--", sArr); // 静态方法 所以是String.join()
System.out.println(s);
// 输出:
// Hello--Hi--Bye
先頭と末尾の空白の文字列を削除します
trim()
trim()
頭と尾削除、(英語)を、空格
\t
\r
\n
String s1 = " Hello \u3000"; // \u3000是中文空格Unicode编码(站长之家有转换工具 感兴趣的可以看看)
String s2 = "\t\nWorld \r ";
System.out.println(s1.trim());
System.out.println(s2.trim());
// 输出:
// `Hello `
// `World`
strip()
strip()
含まれているtrim()
機能、および中国語のスペースと同様のスペースを削除することもできますstripLeading
左側のスペースのみを削除しますstripTrailing
右側のスペースのみを削除します
String s1 = " Hello \u3000";
String s2 = "\t\nWorld \r ";
System.out.println(s1.strip());
System.out.println(s2.strip());
// 输出:
// `Hello`
// `World`
文字列のセグメンテーション
split
String s1 = "Are you ok ?";
String[] sArr = s1.split(" ");
System.out.println(Arrays.toString(sArr)); // 推荐这种打印方式 别用for
// 输出:
// [Are, you, ok, ?]
substring()
substring()
その本質は部分文字列を抽出することであり、これは一種のセグメンテーションと見なすこともできます。
String s1 = "Are you ok ?";
System.out.println(s1.substring(4)); // [4, s1.length()-1]
System.out.println(s1.substring(4, 7)); // [4, 7)
// 输出:
// you ok ?
// you
部分文字列の置換
replace()
replace()
元の文字列を変更しないでください。新しい文字列が返されます
String s1 = "Are you ok ?";
String s2 = s1.replace("o", "ooo"); // 要么用另一个变量接收 要么直接打印 s1未改变
System.out.println(s2);
フォーマットされた出力
format()
静的メソッド、注意String.format()
してください
String s = "My name is %s, and I'm %d years olds.";
System.out.println(String.format(s, "XXX", 18));
// 输出:
// My name is XXX, and I'm 18 years olds.
型変換
Stringとchar []の間で変換する
String s1 = "Hello World!";
char[] sArr = s1.toCharArray();
String s2 = new String(sArr);
System.out.println(Arrays.toString(sArr));
System.out.println(s2);
// 输出:
// [H, e, l, l, o, , W, o, r, l, d, !]
// Hello World!
文字列と基本的なデータ型の変換
ここで変換は、注意を払う必要があり、比較的簡単で静态方法
ないインスタンス属し、それはすべきである类
と呼ばれます
String s1 = "123";
String s2 = "123.45f";
String s3 = "false";
float f = 80.86f;
System.out.println(Integer.parseInt(s1));
System.out.println(Float.parseFloat(s2));
System.out.println(Boolean.parseBoolean(s3));
System.out.println(String.valueOf(f));
// 输出:
// 123
// 123.45
// false
// 80.86