文字列(String)

[戻る] [前に] [次に]

目次

文字列(String)

文字列 を扱うには、String を用います。文字列は "..." で囲みます。

String str = "abc";

テキストブロック

Java 15 でサポートされた機能で、"""...""" で複数行にまたがる テキストブロック を使用することができます。

String s = """
           Usage
             command [options] file...
           """;
System.out.println(s);

一番インデントの浅い行のインデントは無視されます。他の行も同じ数だけのインデントが無視されます。上記の出力結果は次のようになります。

Usage
  command [options] file...

行末の空白は無視されます。行末にバックスラッシュ(\)を記述するとその後ろの改行コードが無視されます。下記の例では改行コード無しで AAABBBCCC と表示されます。

String s = """
           AAA\
           BBB\
           """ + "CCC";
System.out.println(s);

文字列長を得る(length)

length() は、文字列の長さを返します。Java では Unicode を基本とするため、日本語のような全角文字も 1文字として数えます。

String str = "ABCDEFG";
System.out.println(str.length());

等しいかどうか調べる(equals, equalsIgnoreCase)

equals(str) は、文字列が str と等しいかどうかを調べます。

String str = "ABC";
if (str.equals("ABC")) { ... }

大文字・小文字を無視して比較する場合は equalsIgnoreCase(str) を用います。

String str = "ABC";
if (str.equals("abc")) { ... }

文字列を比較する際に、== 演算子を用いてはなりません。strA == strB は、strA と strB が同じオブジェクトかどうかを調べたりする際に用いる演算子です。例えば、下記の例では、strA も strB も文字列の値は "ABCDEF" のはずですが、演算結果は false になります。

String strA = "ABC";
String strB = "ABC";
strA = strA + "DEF";
strB = strB + "DEF";
if (strA == strB) {
    System.out.println("true");
} else {
    System.out.println("false");
}

文字列を大小比較する(compareTo, compareToIgnoreCase)

compareTo(str) は、文字列が、str と比べて辞書的にどちらが大きいか調べます。str のほうが大きい時は負の値を、等しい時は 0を、小さい時は正の値を返します。

String str1 = "ABC";
String str2 = "DEF";
if (str1.compareTo(str2) == 0) { ... }

大文字・小文字を無視して比較する場合は compareToIgnoreCase(str) を用います。

String str1 = "ABC";
String str2 = "abc";
if (str1.compareToIgnoreCase(str2) == 0) { ... }

n番目の文字を得る(charAt)

charAt(n) は、0を基点として n番目の文字を返します。

String str = "ABCDEFG";
System.out.println(str.charAt(2));

指定文字が出現する場所を得る(indexOf)

str.indexOf(ch) は、文字列の中で文字 ch が最初に出現する位置を、0を基点とする文字数で返します。見つからない時は -1 を返します。

String str = "ABCDEFG";
System.out.println(str.indexOf('C'));

文字の代わりに文字列を指定することもできます。

String str = "ABCDEFG";
System.out.println(str.indexOf("DEF"));

第2引数 n を指定すると、n番目以降の場所から探します。

String str = "ABCABCABC";
System.out.println(str.indexOf('A', 2));

lastIndexOf(ch) は、文字列の後ろから探します。

String str = "ABCABCABC";
System.out.println(str.lastIndexOf('A'));

文字列を分割する(split)

split(reg) は、正規表現 reg で文字列を分割し、その配列を返します。

String[] strs = "2003/05/19".split("/");
for (int i = 0; i < strs.length; i++) {
    System.out.println(strs[i]);
}

エスケープシーケンス

文字列の中で次のものは特別な意味を持ちます。エスケープシーケンス と呼ばれています。

種別説明
\bバックスペース(BS)。U+0008。
\sスペース(SPACE)。U+0020。
\tタブ文字(TAB)。U+0009。
\nラインフィード(LF)。U+000a。
\fフォームフィード(FF)。U+000c。
\rキャリッジリターン(CR)。U+000d。
\"ダブルクォーテーション(")。U+0022。
\'シングルクォーテーション(')。U+0027。
\\バックスラッシュ(\)。U+005c。
\N8進数の文字コード。Nは0~7の数字。
\NN8進数の文字コード。Nは0~7の数字。
\NNN8進数の文字コード。Nは0~7の数字。
\uXXXXU+XXXX に相当するUnicode文字。

サロゲートペア

Java では文字を UTF-16 で表します。U+0000~U+FFFF までの文字を1文字として表すことができます。U+10000~U+10FFFF の領域の文字は サロゲートペア と呼ばれる2文字組み合わせにマッピングして表されます。1文字目は U+D800~U+DBFF、2文字目は U+DC00~U+DFFF の範囲で構成されます。

String s = "𩸽";
System.out.println(s);                                     // 𩸽
System.out.println(s.length());                            // 2文字とカウントされる
for (int i = 0; i < s.length(); i++) {
    System.out.println(Integer.toHexString(s.charAt(i)));  // d867 de3d
}

http://www.tohoho-web.com/java/string.htm
初版:2004年6月26日、最終更新:2024年5月5日
[戻る] [前に] [次に]