CodeGym /コース /JAVA 25 SELF /String の基本メソッド

String の基本メソッド

JAVA 25 SELF
レベル 9 , レッスン 3
使用可能

1. メソッド length(): 文字列の長さは?

length() メソッドは文字列の文字数を返します。これは「バイト数」とは必ずしも同じではありません(特に絵文字や Unicode 文字が含まれる場合)が、ほとんどの用途ではこれで十分です。

使用例

String name = "Vasilisa";
int length = name.length();
System.out.println("名前の文字数: " + length); // 8

なぜ必要か

  • ユーザーが空文字列を入力していないか確認する。
  • パスワードの最小/最大長を検証する。
  • 制限までに残り何文字かを知る(SMS やツイートなど)。

例: 空文字チェック

String input = "";
if (input.length() == 0) 
{
    System.out.println("文字列は空です!");
}

豆知識: 文字列が「空」かどうかを調べるには isEmpty() も使えます。詳細は後ほど。

短い FAQ

  • メソッド length() は引数を取りません(かっこは常に空)。
  • 文字列がスペースだけでも、それらも文字として数えられます!
  • 文字列が null の場合に length() を呼ぶと NullPointerException が発生します—まず null を確認しましょう。

2. メソッド substring(): 文字列の一部を取り出す

substring() メソッドは、指定したインデックスで部分文字列を取得できます。

主な呼び出し方は 2 つあります:

  • str.substring(startIndex) — 位置 startIndex から文字列の末尾まで。
  • str.substring(startIndex, endIndex) — 位置 startIndex から endIndex まで(endIndex の文字は含まない)。

注意: 文字のインデックスは 0 から始まります。

使用例

例 1: 名前の最初の3文字を取得

String name = "Vasilisa";
String firstThree = name.substring(0, 3); // "Vas"
System.out.println(firstThree);

例 2: ファイル拡張子を取得

String fileName = "document.pdf";
int dotIndex = fileName.indexOf(".");
String extension = fileName.substring(dotIndex + 1); // "pdf"
System.out.println(extension);

例 3: 末尾4文字

String cardNumber = "1234567890123456";
String lastFour = cardNumber.substring(cardNumber.length() - 4); // "3456"
System.out.println("末尾の4桁: " + lastFour);

特徴と注意点

  • 不正なインデックス(startIndex < 0endIndex > 長さstartIndex > endIndex)は StringIndexOutOfBoundsException を引き起こします。
  • 常に新しい文字列を返します—元の文字列は変化しません。
  • 2 つの引数の形式では、endIndex の文字は含まれません。

String str = "abcdef"; 
// インデックス: 0 1 2 3 4 5

str.substring(1, 4)  "bcd" // インデックス 1, 2, 3 の文字
substring(start, end) の動作図

3. メソッド indexOf(): 文字や部分文字列を検索

indexOf() メソッドは、指定した文字または部分文字列の最初の出現位置(インデックス)を検索します。

  • 見つかった場合 — インデックス(0 から)を返します。
  • 見つからない場合 — -1 を返します。

使用例

例 1: email の最初のドットを見つける

String email = "ivan.petrov@mail.com";
int dotIndex = email.indexOf('.');
System.out.println("最初のドットの位置: " + dotIndex); // 4

例 2: 部分文字列を見つける

String text = "I love Java!";
int index = text.indexOf("Java");
System.out.println(index); // 7

例 3: 指定位置の後で文字を探す

String s = "abracadabra";
int firstA = s.indexOf('a'); // 0
int secondA = s.indexOf('a', firstA + 1); // 3
System.out.println("2 番目の 'a' の位置: " + secondA);

特徴と注意点

  • 同じ文字/部分文字列が複数回出現する場合、最初の出現位置のインデックスを返します。
  • 最後の出現を検索するには lastIndexOf() を使います。
  • 文字は単一引用符 'a'、部分文字列は二重引用符 "abc" を使います。

例: 拡張子の検索

String fileName = "report.final.version.docx";
int lastDot = fileName.lastIndexOf('.');
String extension = fileName.substring(lastDot + 1);
System.out.println("ファイル拡張子: " + extension); // "docx"

4. メソッド charAt(): インデックスで文字を取得

charAt(index) メソッドは、指定したインデックスの文字を返します。

使用例

例 1: 先頭の文字を確認する

String city = "Minsk";
char first = city.charAt(0); // 'M'
System.out.println("最初の文字: " + first);

例 2: 先頭が大文字かどうかを確認

String word = "Java";
if (Character.isUpperCase(word.charAt(0))) 
{
    System.out.println("単語は大文字で始まります!");
}

例 3: 文字列のすべての文字を走査する

String text = "Hello";
for (int i = 0; i < text.length(); i++) 
{
    System.out.println("文字 #" + i + ": " + text.charAt(i));
}

特徴と注意点

  • 範囲外のインデックス(たとえば -1>= 長さ)は StringIndexOutOfBoundsException を引き起こします。
  • 戻り値は char 型であり、文字列ではありません。

5. メソッド toCharArray(): 文字列を文字配列に変換

toCharArray() は文字列を文字配列(char[])に変換する簡単な方法です。文字単位の処理、ソート、検証などに便利です。

使用例:

String text = "Hello";
char[] characters = text.toCharArray();

for (char c : characters) 
{
    System.out.println(c);
}
// 出力:
// H
// e
// l
// l
// o

なぜ必要か:

  • 文字処理: たとえばアナグラム判定など、文字単位のロジックには配列のほうが扱いやすい。
  • 互換性: 一部の API は引数として char[] を期待します。

6. メソッド replace(): 部分文字列を置換

replace(CharSequence target, CharSequence replacement) メソッドは、部分文字列 target のすべての出現を replacement に置き換えます。新しい文字列を返し、元の文字列は変化しません。

使用例:

String sentence = "私は Java でプログラミングするのが好きです。";
String newSentence = sentence.replace("Java", "Java 25");
System.out.println(newSentence);
// 出力: 私は Java 25 でプログラミングするのが好きです。

String email = "support@company.com";
String cleanEmail = email.replace("@", "[at]");
System.out.println(cleanEmail);
// 出力: support[at]company.com

特徴と注意点

  • すべての出現が置換されます。
  • String は不変です: replace() は新しい文字列を返します。
  • 複雑な置換規則には正規表現を使う replaceAll() を利用してください。

7. メソッド trim()strip(): 空白を取り除く

どちらのメソッドも、文字列の先頭と末尾にある「見えない」文字を削除します。

  • trim() — 従来のメソッド: スペース、タブ、改行、および一部の制御文字を削除しますが、すべての Unicode 空白を対象とするわけではありません。
  • strip() — 新しいメソッド: Unicode 標準におけるあらゆる空白を考慮します。新規プロジェクトではこちらが推奨です。

使用例:

String s1 = "   Hello, world!   ";
System.out.println(s1.trim());
// 出力: "Hello, world!"

String s2 = " \u2005  Java 11  \u2005 "; // \u2005 — は Unicode の空白
System.out.println("trim(): " + s2.trim());
System.out.println("strip(): " + s2.strip());
// 出力:
// trim():  Java 11  
// strip(): Java 11

なぜ必要か:

  • ユーザー入力から余計な空白を取り除く。
  • 処理前にファイル/ログなどのデータを正規化する。

8. 実践: 課題を解く

課題 1: パスワード長の検証

String password = "qwerty";
if (password.length() < 8) 
{
    System.out.println("パスワードが短すぎます!");
}
else 
{
    System.out.println("パスワードは要件を満たしています。");
}

課題 2: 氏名から名を抽出

String fullName = "Ivanov Ivan Ivanovich";
int firstSpace = fullName.indexOf(' ');
String name = fullName.substring(firstSpace + 1, fullName.indexOf(' ', firstSpace + 1));
System.out.println("名: " + name); // "Ivan"

課題 3: 文字列が特定の文字で始まるかを確認

String surname = "Petrov";
if (surname.charAt(0) == 'P')
{
    System.out.println("姓は P で始まります");
}

課題 4: email からドメインを取得

String email = "vasya.pupkin@gmail.com";
int at = email.indexOf('@');
String domain = email.substring(at + 1);
System.out.println("ドメイン: " + domain); // "gmail.com"

課題 5: 文字 'a' のすべての出現を探す

String s = "abracadabra";
int pos = s.indexOf('a');
while (pos != -1) 
{
    System.out.println("文字 'a' は位置: " + pos + " に見つかりました");
    pos = s.indexOf('a', pos + 1); // 最後に見つかった位置の次から探す
}

9. String メソッドの使用でよくある誤り

エラー №1: 文字列の範囲外アクセス
インデックスを取り違えて、存在しない文字/部分文字列にアクセスしてしまうことがよくあります。

String s = "Java";
char c = s.charAt(4); // エラー!有効なインデックスは 0..3
String s = "Hello";
String sub = s.substring(3, 10); // エラー!文字列の長さは 5

エラー №2: end を含む/含まないの混同
substring(start, end)start の文字を含みますが、end の文字は含みません。

エラー №3: 見つからない場合でも indexOf-1 以外を返すと期待してしまう
特にその結果を後で substring に使う場合、使用前に必ず結果を確認してください。

エラー №4: 空文字列の扱いを誤る
文字列が空("")のときに charAt(0)substring(0, 1) を呼ぶとエラーになります。先に長さを確認しましょう。

エラー №5: null の文字列の扱い
文字列が null の場合、いずれのメソッド(length()substring() など)を呼んでも NullPointerException が発生します。処理前に必ず null をチェックしましょう。

1
タスク
JAVA 25 SELF, レベル 9, レッスン 3
ロック未解除
インデックスで文字を取得
インデックスで文字を取得
1
タスク
JAVA 25 SELF, レベル 9, レッスン 3
ロック未解除
文字列内の部分文字列検索
文字列内の部分文字列検索
1
タスク
JAVA 25 SELF, レベル 9, レッスン 3
ロック未解除
部分文字列の取得
部分文字列の取得
1
タスク
JAVA 25 SELF, レベル 9, レッスン 3
ロック未解除
最初の文字の確認と部分文字列の抽出
最初の文字の確認と部分文字列の抽出
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION