はじめに
この実験では、Java で文字列が大文字かどうかをチェックする方法を学びます。toUpperCase()
を使用して元の文字列とその大文字バージョンを比較する方法から始めて、これを達成するためのさまざまな方法を探ります。
その後、文字列の各文字を反復処理し、Character.isUpperCase()
メソッドを使用して個々の文字の大文字小文字をチェックする方法を学びます。最後に、これらのチェックを実行する際に文字列内の非文字文字をどのように扱うかについて説明します。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、Java で文字列が大文字かどうかをチェックする方法を学びます。toUpperCase()
を使用して元の文字列とその大文字バージョンを比較する方法から始めて、これを達成するためのさまざまな方法を探ります。
その後、文字列の各文字を反復処理し、Character.isUpperCase()
メソッドを使用して個々の文字の大文字小文字をチェックする方法を学びます。最後に、これらのチェックを実行する際に文字列内の非文字文字をどのように扱うかについて説明します。
このステップでは、Java で文字列を比較する方法、特に大文字小文字を区別しない比較の実行方法について学びます。これはプログラミングにおける一般的なタスクです。たとえば、ユーザーが "yes"、"Yes"、または "YES" を入力したかどうかをチェックする場合などです。
まず、~/project
ディレクトリに StringCompare.java
という名前の新しい Java ファイルを作成しましょう。これは、左側のファイルエクスプローラーで右クリックして「新しいファイル」を選択し、StringCompare.java
と入力することで行えます。
次に、エディタで StringCompare.java
ファイルを開き、以下のコードを追加します。
public class StringCompare {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "hello";
// Case-sensitive comparison
boolean areEqualCaseSensitive = str1.equals(str2);
System.out.println("Case-sensitive comparison: " + areEqualCaseSensitive);
// Case-insensitive comparison using toUpperCase()
boolean areEqualCaseInsensitive = str1.toUpperCase().equals(str2.toUpperCase());
System.out.println("Case-insensitive comparison using toUpperCase(): " + areEqualCaseInsensitive);
}
}
このコードを分解してみましょう。
String
変数 str1
と str2
を宣言します。str1.equals(str2)
は大文字小文字を区別する比較を行います。文字列が文字の大文字小文字を含めて完全に同じである場合にのみ true
を返します。str1.toUpperCase()
は str1
をすべて大文字に変換します("HELLO")。str2.toUpperCase()
は str2
をすべて大文字に変換します("HELLO")。.equals()
を使って文字列の大文字バージョンを比較することで、実質的に大文字小文字を区別しない比較を行います。Ctrl + S
(Mac の場合は Cmd + S
)を押してファイルを保存します。
次に、ターミナルでこのプログラムをコンパイルして実行しましょう。~/project
ディレクトリにいることを確認してください。
コードをコンパイルします。
javac StringCompare.java
エラーがなければ、StringCompare.class
ファイルが作成されます。
次に、コンパイルされたコードを実行します。
java StringCompare
以下の出力が表示されるはずです。
Case-sensitive comparison: false
Case-insensitive comparison using toUpperCase(): true
この出力は、大文字小文字を区別する比較(equals()
)では "Hello" と "hello" は大文字小文字が異なるため false
を返し、toUpperCase()
を使った大文字小文字を区別しない比較では両方の文字列が大文字に変換されて "HELLO" になるため true
を返すことを示しています。
文字列の比較前に toUpperCase()
(または toLowerCase()
)を使用することは、Java で大文字小文字を区別しない比較を行う一般的な方法です。
前のステップでは、文字列全体を大文字小文字を区別せずに比較する方法を学びました。今回は、文字列内の個々の文字を調べ、それが大文字かどうかを判断する方法を探りましょう。これは、文字列の構造を分析する場合や、大文字の文字数を数えたり入力形式を検証したりする際に役立ちます。
Java では、個々の文字を扱うのに便利なメソッドを持つ Character
クラスが用意されています。そのようなメソッドの 1 つが isUpperCase()
で、与えられた文字が大文字かどうかをチェックします。
これを実証するために、StringCompare.java
ファイルを変更しましょう。エディタで ~/project/StringCompare.java
を開き、その内容を以下のコードに置き換えます。
public class StringCompare {
public static void main(String[] args) {
String text = "Hello World";
int uppercaseCount = 0;
System.out.println("Analyzing the string: \"" + text + "\"");
// Loop through each character in the string
for (int i = 0; i < text.length(); i++) {
char character = text.charAt(i); // Get the character at the current index
// Check if the character is uppercase
if (Character.isUpperCase(character)) {
System.out.println("Found an uppercase character: " + character + " at index " + i);
uppercaseCount++; // Increment the counter
}
}
System.out.println("Total uppercase characters found: " + uppercaseCount);
}
}
このコードの新しい部分を理解しましょう。
String
型の変数 text
と、初期値が 0 の整数型の変数 uppercaseCount
を宣言します。for
ループを使って text
文字列の各文字を反復処理します。ループはインデックス 0 から文字列の長さ(ただし、その長さ自体は含まない)まで実行されます。text.charAt(i)
は、文字列内の現在のインデックス i
にある文字を取得します。Character.isUpperCase(character)
は、文字が大文字かどうかをチェックします。このメソッドは、文字が大文字の場合は true
を返し、そうでない場合は false
を返します。isUpperCase()
が true
を返す場合、大文字の文字とそのインデックスを示すメッセージを出力し、uppercaseCount
をインクリメントします。ファイルを保存します(Ctrl + S
)。
次に、~/project
ディレクトリからターミナルで変更したプログラムをコンパイルして実行しましょう。
コンパイル:
javac StringCompare.java
実行:
java StringCompare
以下のような出力が表示されるはずです。
Analyzing the string: "Hello World"
Found an uppercase character: H at index 0
Found an uppercase character: W at index 6
Total uppercase characters found: 2
この出力は、プログラムが文字列内の大文字 'H' と 'W' を正しく識別し、それらをカウントしたことを示しています。
ループ内で Character.isUpperCase()
を使用することは、文字列を 1 文字ずつ分析する強力な手法です。次のステップでは、文字ではない文字をどのように扱うかを考えます。
前のステップでは、Character.isUpperCase()
を使って大文字を識別しました。しかし、文字列には文字だけでなく、数字、記号、空白、句読点なども含まれることがあります。文字列の分析を行う際には、異なる種類の文字を区別する必要があることが多いです。
Character
クラスには、この目的のための他の便利なメソッドが用意されています。例えば以下のようなものです。
Character.isLetter(char ch)
: 文字がアルファベットかどうかをチェックします。Character.isDigit(char ch)
: 文字が数字 (0 - 9) かどうかをチェックします。Character.isWhitespace(char ch)
: 文字が空白文字 (スペース、タブ、改行など) かどうかをチェックします。文字列内の非文字の文字を扱い、異なる種類の文字をカウントする方法を実証するために、StringCompare.java
ファイルを再度変更しましょう。エディタで ~/project/StringCompare.java
を開き、その内容を以下のコードに置き換えます。
public class StringCompare {
public static void main(String[] args) {
String text = "Hello World 123!";
int letterCount = 0;
int digitCount = 0;
int whitespaceCount = 0;
int otherCount = 0;
System.out.println("Analyzing the string: \"" + text + "\"");
// Loop through each character in the string
for (int i = 0; i < text.length(); i++) {
char character = text.charAt(i); // Get the character at the current index
// Check the type of the character
if (Character.isLetter(character)) {
letterCount++;
} else if (Character.isDigit(character)) {
digitCount++;
} else if (Character.isWhitespace(character)) {
whitespaceCount++;
} else {
otherCount++; // Characters that are not letters, digits, or whitespace
}
}
System.out.println("Total characters: " + text.length());
System.out.println("Letter count: " + letterCount);
System.out.println("Digit count: " + digitCount);
System.out.println("Whitespace count: " + whitespaceCount);
System.out.println("Other character count: " + otherCount);
}
}
この更新されたコードでは、以下のことを行っています。
if-else if-else
文を使って Character.isLetter()
、Character.isDigit()
、Character.isWhitespace()
を用いて各文字の種類をチェックします。ファイルを保存します(Ctrl + S
)。
次に、~/project
ディレクトリからターミナルでプログラムをコンパイルして実行しましょう。
コンパイル:
javac StringCompare.java
実行:
java StringCompare
以下のような出力が表示されるはずです。
Analyzing the string: "Hello World 123!"
Total characters: 16
Letter count: 10
Digit count: 3
Whitespace count: 2
Other character count: 1
この出力は、文字列 "Hello World 123!" 内の異なる種類の文字を正しく識別し、カウントしています。文字は 'H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'(合計 10 個)です。数字は '1', '2', '3'(合計 3 個)です。空白文字は "Hello" と "World" の間のスペース、および "World" と "123" の間のスペース(合計 2 個)です。その他の文字は '!'(1 個)です。合計カウントは 10 + 3 + 2 + 1 = 16 で、文字列の長さと一致しています。
Character.isLetter()
、Character.isDigit()
、Character.isWhitespace()
などのメソッドを使うことで、文字列内の様々な種類の文字を扱える、より堅牢なコードを書くことができます。これは、データ検証、入力解析、またはテキスト分析などのタスクにおいて重要です。
この実験では、Java で文字列が大文字かどうかをチェックする方法を学びました。主に 2 つの方法を探りました。まず、toUpperCase()
メソッドと equals()
メソッドを使って、文字列とその大文字変換版を比較することで、大文字小文字を区別しない比較を行いました。この方法は、2 つの文字列が大文字小文字に関係なく同じかどうかをチェックするのに便利です。
次に、文字列の各文字を反復処理し、ループ内で Character.isUpperCase()
メソッドを使って、各文字が大文字かどうかをチェックする方法を学びました。また、このプロセス中に非文字の文字をどのように扱うかも考慮し、チェックが堅牢になるようにしました。これらの手法は、タスクの具体的な要件に基づいて、文字列の大文字状態を判断するための異なるアプローチを提供します。