Javaにおける文字列からの情報抽出
メニューを表示するにはスワイプしてください
実際のアプリケーションでテキストを扱う場合、文字列全体が必要になることはほとんどありません。多くの場合、必要なのはその一部だけです。メール内の名前、注文メッセージ内の商品、文中に隠された特定のキーワードなどです。Java には、必要な部分だけを正確に抽出できるシンプルかつ強力なツールが用意されています。
substring()
文字位置に基づいて文字列の「スライス」を取得したい場合は、.substring() を使用します。ゼロベースのインデックス(カウントは 0 から開始)に依存します。新しい String を返します。
Main.java
123456789101112package com.example; public class Main { public static void main(String[] args) { String order = "Large Latte with oat milk"; String drinkName = order.substring(6, 11); System.out.println(drinkName); } }
substring(6, 11) は、Java にインデックス 6(含む)からインデックス 11(含まない)まで開始するよう指示します。つまり、位置 6 から 10 までの文字を抽出し、結果は "Latte" となります。
substring(start) のように引数を1つだけ指定した場合、Java はその位置から文字列の末尾までを抽出します:
order.substring(6); // "Latte with oat milk"
indexOf()
文字列内で特定のテキストがどこにあるかを調べたい場合は、.indexOf() を使用します。テキストを切り取るのではなく、位置を特定します。マッチした部分の開始インデックスを表す int を返します。
Main.java
123456789101112package com.example; public class Main { public static void main(String[] args) { String order = "Large Latte with oat milk"; int lattePosition = order.indexOf("Latte"); System.out.println(lattePosition); } }
Javaは文字列を左から右にスキャンし、"Latte"を見つけるとその最初の文字の位置—6—を返します。文字列内に該当するテキストが見つからない場合、Javaは-1を返します。
両方の組み合わせ — 実例
この実例では、indexOf()とsubstring()を組み合わせて、メールアドレスからユーザー名を抽出します。
Main.java
1234567891011121314package com.example; public class Main { public static void main(String[] args) { String customerEmail = "anna.coffee@gmail.com"; int atPosition = customerEmail.indexOf("@"); String username = customerEmail.substring(0, atPosition); System.out.println(username); } }
indexOf("@") は @ 記号の位置を検出し、次に substring(0, atPosition) で文字列の先頭から — ただし @ を含めずに — その直前までを抽出します。結果は "anna.coffee" です。位置をハードコーディングせず、Java に境界を特定させて必要な部分を正確に抽出します。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください