1. 文字列の比較

文字列を使用した最も一般的な操作の 1 つは比較です。String クラスには、ある文字列と別の文字列を比較するために使用される 10 を超える異なるメソッドがあります。以下では主なものを7つ紹介します。

メソッド 説明
boolean equals(String str)
すべての文字が一致する場合、文字列は等しいとみなされます。
boolean equalsIgnoreCase(String str)
文字の大文字と小文字を無視して文字列を比較します(大文字か小文字かを無視します)。
int compareTo(String str)
文字列を辞書順に比較します。文字列が等しい場合は 0 を返します。現在の文字列が文字列パラメータより小さい場合、戻り値は 0 より小さくなります。現在の文字列が文字列パラメータより大きい場合、戻り値はより大きくなります。
int compareToIgnoreCase(String str)
大文字と小文字を区別せずに文字列を辞書順に比較します。文字列が等しい場合は 0 を返します。現在の文字列が文字列パラメータより小さい場合、戻り値は負になります。現在の文字列が文字列パラメータより大きい場合、戻り値はより大きくなります。
boolean regionMatches(int toffset, String str, int offset, int len)
文字列の一部を比較します
boolean startsWith(String prefix)
現在の文字列が次の文字列で始まるかどうかを確認します。prefix
boolean endsWith(String suffix)
現在の文字列が次の文字列で終わるかどうかを確認します。suffix

ユーザーにファイルへのパスを要求し、拡張子に基づいてファイルの種類をチェックするプログラムを作成するとします。このようなプログラムのコードは次のようになります。

コード ノート
Scanner console = new Scanner(System.in);
String path = console.nextLine();

if (path.endsWith(".jpg") || path.endsWith(".jpeg"))
{
   System.out.println("This is a jpeg!");
}
else if (path.endsWith(".htm") || path.endsWith(".html"))
{
   System.out.println("This is an HTML page");
}
else if (path.endsWith(".doc") || path.endsWith(".docx"))
{
   System.out.println("This is a Word document");
}
else
{
   System.out.println("Unknown format");
}
Scannerオブジェクトを作成する
コンソールから行を読み取る 文字列が指定された文字列で終わる

かどうかを確認するpath


2. 部分文字列の検索

文字列の比較に次いで 2 番目によく使用される操作は、ある文字列の中にある別の文字列を見つけることです。String クラスには、これを行うためのメソッドもいくつかあります。

メソッド 説明
int indexOf(String str)
現在の文字列内の文字列を検索しますstr。最初に出現した最初の文字のインデックスを返します。
int indexOf(String str, int index)
str最初の文字をスキップして、現在の文字列内の文字列を検索しますindex。オカレンスのインデックスを返します。
int lastIndexOf(String str)
現在の文字列内の文字列をstr末尾から検索します。最初に出現したインデックスを返します。
int lastIndexOf(String str, int index)
現在の文字列の先頭の文字をスキップstrして、末尾からindex文字列を検索します。
boolean matches(String regex)
現在の文字列が正規表現で指定されたパターンと一致するかどうかを確認します。

indexOf(String)と のメソッドindexOf(String, index)は組み合わせて使用​​されることがよくあります。最初の方法では、現在の文字列内で渡された部分文字列が最初に出現する箇所を検索します。2 番目の方法では、最初のインデックス文字をスキップして、2 番目、3 番目などの出現箇所を検索できます。

「 https://domain.com/about/reviews 」のような URL があり、ドメイン名を「codegym.cc」に置き換えたいとします。URL にはさまざまな種類のドメイン名を付けることができますが、次のことがわかっています。

  • ドメイン名の前には 2 つのスラッシュ (" //" ) が付きます。
  • ドメイン名の後には 1 つのスラッシュ (" /" ) が続きます。

このようなプログラムのコードは次のようになります。

コード ノート
Scanner console = new Scanner(System.in);
String path = console.nextLine();

int index = path.indexOf("//");
int index2 = path.indexOf("/", index + 2);

String first = path.substring(0, index + 2);
String last = path.substring(index2);

String result = first + "codegym.cc" + last;
System.out.println(result);
Scanner オブジェクトを作成します。
コンソールから行を読み取ります。

文字列 " //"の最初の出現箇所のインデックスを取得します。
文字列の最初の出現箇所のインデックスを取得します/が、文字の出現後のみを調べます//
文字の先頭から末尾までの文字列を取得します。//
文字列の先頭から/末尾までを取得します。

文字列と新しいドメインを連結します。

メソッドlastIndexOf(String)lastIndexOf(String, index)メソッドは同じように機能しますが、文字列の末尾から先頭まで検索が実行されるだけです。



3. 部分文字列の作成

文字列の比較と部分文字列の検索に加えて、文字列から部分文字列を取得するという非常に一般的なアクションがもう 1 つあります。偶然ですが、前の例では、substring()文字列の一部を返すメソッド呼び出しを示しました。

現在の文字列から部分文字列を返す 8 つのメソッドのリストを次に示します。

メソッド 説明
String substring(int beginIndex, int endIndex)
インデックス範囲で指定された部分文字列を返しますbeginIndex..endIndex
String repeat(int count)
現在の文字列を n 回繰り返します
String replace(char oldChar, char newChar)
新しい文字列を返します。文字をoldChar文字に置き換えます。newChar
String replaceFirst(String regex, String replacement)
現在の文字列内の正規表現で指定された最初の部分文字列を置き換えます。
String replaceAll(String regex, String replacement)
現在の文字列内の正規表現に一致するすべての部分文字列を置き換えます。
String toLowerCase()
文字列を小文字に変換します
String toUpperCase()
文字列を大文字に変換します
String trim()
文字列の先頭と末尾にあるすべてのスペースを削除します

利用可能な方法の概要は次のとおりです。

substring(int beginIndex, int endIndex)方法

このsubstringメソッドは、現在の文字列内の文字で構成される新しい文字列を返します。この文字列は、インデックスを持つ文字から始まり でbeginIndex終わりますendIndex。Java のすべての間隔と同様に、インデックス付きの文字はendIndex間隔に含まれません。例:

コード 結果
"Hellos".substring(0, 3);
"Hel"
"Hellos".substring(1, 4);
"ell"
"Hellos".substring(1, 6);
"ellos"
"Hellos".substring(1);
"ellos"

パラメーターが指定されていない場合endIndex(これは可能です)、beginIndex の文字から文字列の末尾までの部分文字列が取得されます。

repeat(int n)方法

repeat メソッドは、現在の文字n列を単純に繰り返します。例:

コード 結果
"Hello".repeat(3);
"HelloHelloHello"
"Hello".repeat(2);
"HelloHello"
"Hello".repeat(1);
"Hello"
"Hello".repeat(0);
""

replace(char oldChar, char newChar)方法

このメソッドは、すべての文字が文字 に置き換えられたreplace()新しい文字列を返します。これによって文字列の長さは変わりません。例:oldCharnewChar

コード 結果
"Programming".replace('Z', 'z');
"Programming"
"Programming".replace('g', 'd');
"Prodrammind"
"Programming".replace('a', 'e');
"Progremming"
"Programming".replace('m', 'w');
"Prograwwing"

replaceFirst()replaceAll()メソッド

このreplaceAll()メソッドは、出現する 1 つの部分文字列をすべて別の部分文字列に置き換えます。このreplaceFirst()メソッドは、渡された部分文字列の最初の出現を指定された部分文字列に置き換えます。置換する文字列は正規表現で指定します。Java マルチスレッドのクエストでは正規表現について詳しく説明します。

例:

コード 結果
"Good news everyone!".replaceAll("e.", "EX");
"Good nEXs EXEXyonEX"
"Good news everyone!".replaceAll("o.", "-o-");
"G-o-d news every-o-e!"
"Good news everyone!".replaceFirst("e.", "EX");
"Good nEXs everyone!"
"Good news everyone!".replaceFirst("o.", "-o-");
"G-o-d news everyone!"

toLowerCase() and toUpperCase()メソッド

これらのメソッドについては、クラスのメソッドの呼び出しについて初めて学んだときに知りましたString

trim()方法

このtrim()メソッドは、文字列から先頭と末尾のスペースを削除します。文字列内のスペースには触れません (つまり、先頭または末尾にありません)。例:

コード 結果
"     ".trim();
""
"Hello".trim();
"Hello"
" Hello\n how are you?\n   ".trim();
"Hello\n how are you?\n"
"  Password\n   \n ".trim();
"Password\n   \n"