はじめに
この実験では、Java で文字列が特定の部分文字列を含むかどうかをチェックする方法を学びます。この一般的なタスクに対するさまざまな方法を、シンプルな contains() メソッドから始めて探索します。contains() を使用して、文字列が指定された文字シーケンスを含むかどうかを判断する方法を学び、簡単な Java プログラムでこれを実装する練習を行います。
contains() の紹介に続き、この実験では indexOf() メソッドを使用して、部分文字列の存在をチェックするだけでなく、文字列内でのその位置を見つける方法を案内します。最後に、大文字と小文字を区別しない部分文字列のチェックを行うテクニックを学び、コードが大文字と小文字の違いを処理できるようにします。この実験の終わりまでに、Java で部分文字列のチェックを行うさまざまなアプローチについてしっかりと理解できるようになります。
contains() を使用して部分文字列を検索する
このステップでは、Java の contains() メソッドを使用して、文字列が特定の部分文字列を含むかどうかをチェックする方法を学びます。これはプログラミングにおける一般的なタスクです。例えば、文章内でキーワードを検索したり、ファイル名が特定の拡張子を含むかどうかを確認したりする場合に使用されます。
contains() メソッドは Java の String クラスの一部です。文字列が指定された文字シーケンスを含む場合は true を返し、そうでない場合は false を返します。
contains() の使用を練習するために、新しい Java ファイルを作成しましょう。
WebIDE の左側にあるファイルエクスプローラーを開きます。
~/projectディレクトリにいることを確認します。空白部分を右クリックし、「新しいファイル」を選択します。
新しいファイルの名前を
StringContains.javaにします。エディターで
StringContains.javaファイルを開きます。次のコードをエディターにコピーして貼り付けます。
public class StringContains { public static void main(String[] args) { String sentence = "Java programming is fun and powerful."; String keyword = "programming"; // Check if the sentence contains the keyword boolean containsKeyword = sentence.contains(keyword); System.out.println("Sentence: \"" + sentence + "\""); System.out.println("Keyword: \"" + keyword + "\""); System.out.println("Does the sentence contain the keyword? " + containsKeyword); String anotherKeyword = "Python"; boolean containsAnotherKeyword = sentence.contains(anotherKeyword); System.out.println("\nAnother keyword: \"" + anotherKeyword + "\""); System.out.println("Does the sentence contain the another keyword? " + containsAnotherKeyword); } }このコードでは、以下のことを行っています。
String型の変数sentenceとString型の変数keywordを宣言しています。sentence.contains(keyword)を使用して、sentenceがkeywordの文字シーケンスを含むかどうかをチェックしています。その結果はboolean型の変数containsKeywordに格納されます。- 元の文章、キーワード、および
contains()チェックの結果を出力しています。 - 別のキーワード "Python" で同じ処理を繰り返し、部分文字列が見つからない場合の結果を確認しています。
ファイルを保存します(Ctrl+S または Cmd+S)。
WebIDE の下部にあるターミナルを開きます。
次のコマンドを使用して、
~/projectディレクトリにいることを確認します。cd ~/projectjavacコマンドを使用して Java プログラムをコンパイルします。javac StringContains.javaエラーがなければ、何も出力されません。
~/projectディレクトリにStringContains.classファイルが作成されます。javaコマンドを使用してコンパイルされた Java プログラムを実行します。java StringContains次のような出力が表示されるはずです。
Sentence: "Java programming is fun and powerful." Keyword: "programming" Does the sentence contain the keyword? true Another keyword: "Python" Does the sentence contain the another keyword? false
この出力は、contains() メソッドが文章が "programming" を含み、"Python" を含まないことを正しく識別したことを示しています。
indexOf() を使って部分文字列の位置を調べる
前のステップでは、contains() を使って文字列が部分文字列を含むかどうかをチェックする方法を学びました。今度は、もう 1 つの便利なメソッド indexOf() を調べてみましょう。このメソッドは、部分文字列が存在するかどうかだけでなく、文字列内でのその開始位置も教えてくれます。
Java の String クラスの indexOf() メソッドは、指定された部分文字列が最初に出現する文字列内のインデックスを返します。インデックスは部分文字列の最初の文字の位置です。プログラミングでは、インデックスは通常 0 から始まることを覚えておいてください。部分文字列が見つからない場合、indexOf() は -1 を返します。
前の Java ファイル StringContains.java を修正して、indexOf() メソッドを使ってみましょう。
WebIDE のエディターで
StringContains.javaファイルを開きます。ファイルの内容全体を次のコードに置き換えます。
public class StringContains { public static void main(String[] args) { String sentence = "Java programming is fun and powerful."; String keyword = "programming"; // Find the index of the keyword int index = sentence.indexOf(keyword); System.out.println("Sentence: \"" + sentence + "\""); System.out.println("Keyword: \"" + keyword + "\""); if (index != -1) { System.out.println("The keyword \"" + keyword + "\" was found at index: " + index); } else { System.out.println("The keyword \"" + keyword + "\" was not found."); } String anotherKeyword = "Python"; int anotherIndex = sentence.indexOf(anotherKeyword); System.out.println("\nAnother keyword: \"" + anotherKeyword + "\""); if (anotherIndex != -1) { System.out.println("The keyword \"" + anotherKeyword + "\" was found at index: " + anotherIndex); } else { System.out.println("The keyword \"" + anotherKeyword + "\" was not found."); } } }この更新されたコードでは、以下のことを行っています。
sentence.indexOf(keyword)を使って、sentence内のkeywordの開始インデックスを見つけます。結果はint型の変数indexに格納されます。if文を使って、返されたindexが -1 かどうかをチェックします。-1 でない場合は、キーワードが見つかったことを意味し、そのインデックスを出力します。そうでない場合は、キーワードが見つからなかったことを示すメッセージを出力します。- "Python" に対しても同じ処理を繰り返し、部分文字列が存在しない場合を示します。
ファイルを保存します(Ctrl+S または Cmd+S)。
WebIDE の下部にあるターミナルを開きます。
~/projectディレクトリにいることを確認します。修正した Java プログラムをコンパイルします。
javac StringContains.javaコンパイルした Java プログラムを実行します。
java StringContains次のような出力が表示されるはずです。
Sentence: "Java programming is fun and powerful." Keyword: "programming" The keyword "programming" was found at index: 5 Another keyword: "Python" The keyword "Python" was not found.
この出力は、"programming" が文章内のインデックス 5 から始まることを示しています('J' がインデックス 0、'a' がインデックス 1 というように、スペースも含めて数えることを覚えておいてください)。また、"Python" が見つからなかったことも正しく示されています。
indexOf() を使うことで、部分文字列の存在をチェックするだけでなく、その正確な位置を特定することができます。これは、さまざまな文字列操作タスクに役立ちます。
部分文字列のチェックを大文字小文字を区別しないようにする
前のステップでは、contains() と indexOf() を使って部分文字列を検索しました。しかし、これらのメソッドは大文字小文字を区別します。つまり、"Java" は "java" や "JAVA" とは異なるとみなされます。多くの場合、大文字小文字を区別しない検索を行いたいことがあります。
Java の String クラスには containsIgnoreCase() や indexOfIgnoreCase() のような組み込みメソッドはありません。しかし、検索を行う前に、元の文字列と部分文字列の両方を同じケース(小文字または大文字)に変換することで、大文字小文字を区別しない検索を実現できます。最も一般的な方法は、toLowerCase() メソッドを使って両方を小文字に変換することです。
StringContains.java ファイルを再度修正して、大文字小文字を区別しない検索を行いましょう。
WebIDE のエディターで
StringContains.javaファイルを開きます。ファイルの内容全体を次のコードに置き換えます。
public class StringContains { public static void main(String[] args) { String sentence = "Java programming is fun and powerful."; String keyword = "JAVA"; // Using uppercase for demonstration // Convert both strings to lowercase for case-insensitive comparison String lowerSentence = sentence.toLowerCase(); String lowerKeyword = keyword.toLowerCase(); // Use contains() on the lowercase strings boolean containsKeyword = lowerSentence.contains(lowerKeyword); System.out.println("Original Sentence: \"" + sentence + "\""); System.out.println("Original Keyword: \"" + keyword + "\""); System.out.println("Does the sentence contain the keyword (case-insensitive)? " + containsKeyword); // You can also use indexOf() in a case-insensitive way int index = lowerSentence.indexOf(lowerKeyword); if (index != -1) { System.out.println("The keyword \"" + keyword + "\" was found at index (case-insensitive): " + index); } else { System.out.println("The keyword \"" + keyword + "\" was not found (case-insensitive)."); } } }このコードでは、以下のことを行っています。
keywordを "JAVA"(大文字)として定義しています。toLowerCase()を使って元の文字列を小文字に変換し、新しい文字列lowerSentenceとlowerKeywordを作成しています。- 小文字の文字列に対して
contains()メソッドを使って、大文字小文字を区別しないチェックを行っています。 - 小文字の文字列に
indexOf()を適用することで、大文字小文字を区別しない方法でindexOf()を使う方法も示しています。
ファイルを保存します(Ctrl+S または Cmd+S)。
WebIDE の下部にあるターミナルを開きます。
~/projectディレクトリにいることを確認します。修正した Java プログラムをコンパイルします。
javac StringContains.javaコンパイルした Java プログラムを実行します。
java StringContains次のような出力が表示されるはずです。
Original Sentence: "Java programming is fun and powerful." Original Keyword: "JAVA" Does the sentence contain the keyword (case-insensitive)? true The keyword "JAVA" was found at index (case-insensitive): 0
この出力は、元のキーワードが "JAVA"(大文字)であっても、大文字小文字を区別しない検索が文章内でそれを正しく見つけ、そのインデックス(小文字の "Java" の場合は 0)を報告したことを示しています。
検索前に文字列を一致したケースに変換することで、Java で簡単に大文字小文字を区別しない部分文字列のチェックを行うことができます。
まとめ
この実験では、Java で文字列が特定の部分文字列を含むかどうかをチェックする方法を学びました。まず、contains() メソッドを使って、部分文字列の存在を単純なブール値でチェックする方法を学びました。このメソッドは簡単で、基本的な部分文字列の存在チェックに便利です。
次に、indexOf() メソッドを調べました。このメソッドは部分文字列の存在をチェックするだけでなく、最初に出現する部分文字列の開始インデックスも返します。これにより、文字列内での部分文字列の位置をより詳細に分析することができます。最後に、大文字小文字を区別しない部分文字列のチェックという一般的な要件に対応し、元の文字列のケースに関係なくこれを実現する手法を示しました。



