Java文字列をマスター:生成、メソッド、ベストプラクティス
Java文字列
このチュートリアルでは、Java文字列について、作成方法とStringクラスのさまざまなメソッドを例を用いて学びます。
Javaでは、文字列は文字のシーケンスです。例えば、"hello"は'h'、'e'、'l'、'l'、'o'という文字のシーケンスを含む文字列です。
Javaでは文字列を表すのに二重引用符を使用します。例えば、
// 文字列を作成
String type = "Java programming";
ここでは、typeという名前の文字列変数を作成しました。この変数は文字列Java Programmingで初期化されています。
例: Javaで文字列を作成
class Main {
public static void main(String[] args) {
// 文字列を作成
String first = "Java";
String second = "Python";
String third = "JavaScript";
// 文字列を出力
System.out.println(first); // Javaを出力
System.out.println(second); // Pythonを出力
System.out.println(third); // JavaScriptを出力
}
}
上記の例では、first、second、thirdという3つの文字列を作成しました。ここではプリミティブ型のように直接文字列を作成しています。
しかし、Java文字列を作成する別の方法(newキーワードを使用)もあります。それについてはこのチュートリアルの後半で学びます。
注意: Javaの文字列はプリミティブ型(int、charなど)ではありません。代わりに、すべての文字列はStringという定義済みクラスのオブジェクトです。
そして、すべての文字列変数はStringクラスのインスタンスです。
Java文字列操作
Java Stringクラスは文字列に対してさまざまな操作を実行するメソッドを提供します。よく使用される文字列操作を見てみましょう。
1. 文字列の長さを取得
文字列の長さを求めるには、Stringのlength()メソッドを使用します。例えば、
class Main {
public static void main(String[] args) {
// 文字列を作成
String greet = "Hello! World";
System.out.println("文字列: " + greet);
// greetの長さを取得
int length = greet.length();
System.out.println("長さ: " + length);
}
}
出力
文字列: Hello! World 長さ: 12
上記の例では、length()メソッドが文字列の総文字数を計算して返します。詳細については、Java String length()を参照してください。
2. 2つのJava文字列を結合
Javaではconcat()メソッドを使用して2つの文字列を結合できます。例えば、
class Main {
public static void main(String[] args) {
// 最初の文字列を作成
String first = "Java ";
System.out.println("最初の文字列: " + first);
// 2番目の文字列を作成
String second = "Programming";
System.out.println("2番目の文字列: " + second);
// 2つの文字列を結合
String joinedString = first.concat(second);
System.out.println("結合された文字列: " + joinedString);
}
}
出力
最初の文字列: Java 2番目の文字列: Programming 結合された文字列: Java Programming
上記の例では、firstとsecondという2つの文字列を作成しました。次の文に注目してください:
String joinedString = first.concat(second);
ここでは、concat()メソッドがsecond文字列をfirst文字列に結合し、joinedString変数に割り当てます。
+演算子を使用して2つの文字列を結合することもできます。詳細については、Java String concat()を参照してください。
3. 2つの文字列を比較
Javaでは、equals()メソッドを使用して2つの文字列を比較できます。例えば、
class Main {
public static void main(String[] args) {
// 3つの文字列を作成
String first = "java programming";
String second = "java programming";
String third = "python programming";
// 最初と2番目の文字列を比較
boolean result1 = first.equals(second);
System.out.println("最初と2番目の文字列は等しい: " + result1);
// 最初と3番目の文字列を比較
boolean result2 = first.equals(third);
System.out.println("最初と3番目の文字列は等しい: " + result2);
}
}
出力
最初と2番目の文字列は等しい: true 最初と3番目の文字列は等しい: false
上記の例では、first、second、thirdという3つの文字列を作成しました。ここではequals()メソッドを使用して、ある文字列が別の文字列と等しいかどうかをチェックしています。
equals()メソッドは文字列を比較する際に内容をチェックします。詳細については、Java String equals()を参照してください。
注意: Javaでは==演算子を使用して2つの文字列を比較することもできます。しかし、このアプローチはequals()メソッドとは異なります。詳細については、Java String == vs equals()を参照してください。
Java文字列のエスケープ文字
エスケープ文字は、文字列内に存在する一部の文字をエスケープするために使用されます。
文字列内に二重引用符を含める必要があるとします。
// 二重引用符を含める
String example = "This is the "String" class";
文字列は二重引用符で表されるため、コンパイラは"This is the "を文字列として扱います。したがって、上記のコードはエラーになります。
この問題を解決するために、Javaではエスケープ文字\を使用します。例えば、
// エスケープ文字を使用
String example = "This is the \"String\" class.";
これでエスケープ文字がコンパイラに二重引用符をエスケープし、テキスト全体を読み取るよう指示します。
Java文字列はイミュータブル
Javaでは、文字列はイミュータブル(不変)です。これは、一度文字列を作成すると、その文字列を変更できないことを意味します。
より深く理解するために例を考えます:
// 文字列を作成
String example = "Hello! ";
ここでは、exampleという文字列変数を作成しました。この変数は文字列"Hello! "を保持しています。
今度はこの文字列を変更したいとします。
// 別の文字列"World"を
// 前の文字列に追加
example = example.concat(" World");
ここでは、concat()メソッドを使用して別の文字列Worldを前の文字列に追加しています。
あたかも前の文字列の値を変更できたように見えます。しかし、これはtrueではありません。
ここで何が起こったか見てみましょう:
- JVMが最初の文字列"Hello! "を取得
- "World"を最初の文字列に追加して新しい文字列を作成
- 新しい文字列"Hello! World"をexample変数に割り当て
- 最初の文字列"Hello! "は変更されないまま
newキーワードを使用した文字列作成
これまでJavaでプリミティブ型のように文字列を作成してきました。
Javaの文字列はオブジェクトであるため、newキーワードを使用して文字列を作成することもできます。例えば、
// newキーワードを使用して文字列を作成
String name = new String("Java String");
上記の例では、newキーワードを使用してnameという文字列を作成しました。
ここで文字列オブジェクトを作成すると、String()コンストラクタが呼び出されます。コンストラクタについては、Javaコンストラクタを参照してください。
注意: Stringクラスは文字列を作成するためのさまざまなコンストラクタを提供します。詳細については、Java String(公式Javaドキュメント)を参照してください。
例: newキーワードを使用したJava文字列作成
class Main {
public static void main(String[] args) {
// newを使用して文字列を作成
String name = new String("Java String");
System.out.println(name); // Java Stringを出力
}
}
リテラル vs newキーワードでの文字列作成
文字列リテラルとnewキーワードでの文字列作成方法を理解したところで、それらの主な違いを見てみましょう。
Javaでは、JVMがすべての文字列をメモリ内に格納するための文字列プールを維持しています。文字列プールは文字列の再利用に役立ちます。
1. 文字列リテラルを使用して文字列を作成する場合、
String example = "Java";
ここでは、文字列の値(Java)を直接提供しています。したがって、コンパイラはまず文字列プールをチェックして、その文字列が既に存在するかどうかを確認します。
- 文字列が既に存在する場合、新しい文字列は作成されません。代わりに、新しい参照exampleが既に存在した文字列(
Java)を指します。 - 文字列が存在しない場合、新しい文字列(
Java)が作成されます。
2. newキーワードを使用して文字列を作成する場合、
String example = new String("Java");
ここでは、文字列の値が直接提供されていません。したがって、"Java"がメモリプール内に既に存在していても、新しい"Java"文字列が作成されます。
Java Stringのメソッド
上記で言及したもの以外にも、Javaにはさまざまな文字列メソッドがあります。そのうちのいくつかを紹介します:
| メソッド | 説明 |
|---|---|
| contains() | 文字列が部分文字列を含むかチェック |
| substring() | 文字列の部分文字列を返す |
| join() | 区切り文字を使用して指定された文字列を結合 |
| replace() | 指定された古い文字を新しい文字で置換 |
| replaceAll() | 正規表現パターンに一致するすべての部分文字列を置換 |
| replaceFirst() | 最初に一致する部分文字列を置換 |
| charAt() | 指定位置の文字を返す |
| getBytes() | 文字列をバイト配列に変換 |
| indexOf() | 指定文字の位置を返す |
| compareTo() | 辞書順で2つの文字列を比較 |
| compareToIgnoreCase() | 大文字小文字を無視して2つの文字列を比較 |
| trim() | 先頭と末尾の空白を削除 |
| format() | フォーマット済み文字列を返す |
| split() | 文字列を文字列配列に分割 |
| toLowerCase() | 文字列を小文字に変換 |
| toUpperCase() | 文字列を大文字に変換 |
| valueOf() | 指定引数の文字列表現を返す |
| toCharArray() | 文字列をchar配列に変換 |
| matches() | 文字列が指定された正規表現に一致するかチェック |
| startsWith() | 文字列が指定文字列で始まるかチェック |
| endsWith() | 文字列が指定文字列で終わるかチェック |
| isEmpty() | 文字列が空かどうかチェック |
| intern() | 文字列の標準表現を返す |
| contentEquals() | 文字列がcharSequenceと等しいかチェック |
| hashCode() | 文字列のハッシュコードを返す |
| subSequence() | 文字列から部分シーケンスを返す |
Java
- C# 文字列をマスターする:基礎、操作、高度なテクニック
- Java演算子をマスター:種類、構文、実践例
- Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
- Java Enumの文字列表現マスター:デフォルト、オーバーライド、高度なパターン
- Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
- Javaアノテーション完全ガイド:種類、配置場所、実践例
- Java String.charAt()完全解説:構文、戻り値、例外、実例
- Java String.endsWith()マスター:文字列サフィックスチェック実例付き
- Java文字列置換マスター:replace()、replaceAll()、replaceFirst()徹底解説
- Java String toLowerCase() & toUpperCase():ロケール対応テキストケース変換
- JavaでcharをStringに変換する方法:実践例とベストプラクティス