Java のインデックスで文字列の文字を取得する

Mohammad Irfan 2023年10月12日
  1. Java で charAt() メソッドを使用して文字列文字を取得する
  2. String.valueOf() メソッドを使用して Char を String に変換する
  3. Java で文字列から Char 配列を取得する
  4. Unicode 補足多言語面(SMP)の文字のフェッチ
  5. まとめ
Java のインデックスで文字列の文字を取得する

このチュートリアルでは、Java でインデックスによって文字列文字を取得する方法を紹介し、トピックを理解するためのサンプルコードもいくつかリストします。

文字列は、文字のシーケンスを格納するために使用されます。配列と同様に、文字列もゼロベースのインデックス付けに従います。これは、文字列の最初の文字にゼロのインデックス値が割り当てられることを意味します。インデックスを使用して、文字列から個々の文字をフェッチできます。このチュートリアルでは、これを行う方法を学習します。

Java で charAt() メソッドを使用して文字列文字を取得する

charAt() メソッドは、パラメータとしてインデックス値を受け取り、文字列内のそのインデックスに存在する文字を返します。これは、文字列から文字をフェッチする最も簡単な方法であり、String クラスのメソッドです。

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char characterAtIdx1 = s.charAt(1); // character e
    char characterAtIdx4 = s.charAt(4); // whitespace
    char characterAtIdx5 = s.charAt(5); // character s

    System.out.println("The string is: " + s);
    System.out.println("Character at Index 1: " + characterAtIdx1);
    System.out.println("Character at Index 4: " + characterAtIdx4);
    System.out.println("Character at Index 5: " + characterAtIdx5);
  }
}

出力:

The string is: test string
Character at Index 1: e
Character at Index 4:  
Character at Index 5: s

上記のコードで見たように、このメソッドの戻り型は char です。Character クラスの toString() メソッドを使用してこの char 型を文字列に変換し、length() メソッドを使用してこの文字列の長さを取得することもできます。

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char characterAtIdx6 = s.charAt(6); // character t
    String stringAtIdx6 = Character.toString(characterAtIdx6); // char to string
    System.out.println("Length: " + stringAtIdx6.length());
    System.out.println("String: " + stringAtIdx6);
  }
}

出力:

Length: 1
String: t

String.valueOf() メソッドを使用して Char を String に変換する

文字列から char を取得した後、必要に応じて String.valueOf() メソッドを使用して char を String に変換できます。

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char characterAtIdx6 = s.charAt(6); // character t
    String stringAtIdx6 = String.valueOf(characterAtIdx6); // char to string

    System.out.println("Length: " + stringAtIdx6.length());
    System.out.println("String: " + stringAtIdx6);
  }
}

出力:

Length: 1
String: t

空の文字列を文字に連結して、文字列に変換することもできます。間に何もない引用符は、空の文字列を表します。これは、Java で String オブジェクトを取得するための最も簡単で暗黙的な方法の 1つです。

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char characterAtIdx6 = s.charAt(6); // character t
    String stringAtIdx6 = "" + characterAtIdx6; // char to string

    System.out.println("Length: " + stringAtIdx6.length());
    System.out.println("String: " + stringAtIdx6);
  }
}

出力:

Length: 1
String: t

Java で文字列から Char 配列を取得する

角かっこを使用すると、インデックスによって配列要素を取得できます。文字列を char 型の配列に変換すると、そこから任意の文字をフェッチできます。

Java は、char 配列を返す便利な toCharArray() メソッドを提供します。このメソッドを文字列で使用して、char 配列を取得できます。

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char[] charArr = s.toCharArray();

    System.out.println("The string is: " + s);
    System.out.println("Character at Index 1: " + charArr[1]);
    System.out.println("Character at Index 4: " + charArr[4]);
    System.out.println("Character at Index 5: " + charArr[5]);
  }
}

出力:

The string is: test string
Character at Index 1: e
Character at Index 4:  
Character at Index 5: s

前のセクションで説明したメソッドを使用して、char を文字列に変換できます。

public class Demo {
  public static void main(String[] args) {
    String s = "test string";
    char[] charArr = s.toCharArray();

    char characterAtIdx6 = charArr[6]; // character t
    String str1 = Character.toString(characterAtIdx6); // char to string
    String str2 = String.valueOf(characterAtIdx6); // char to string
    String str3 = "" + characterAtIdx6; // char to string

    System.out.println("Using toString()");
    System.out.println("Length: " + str1.length() + " String: " + str1);

    System.out.println("\nUsing valueOf()");
    System.out.println("Length: " + str2.length() + " String: " + str2);

    System.out.println("\nUsing empty string concatenation");
    System.out.println("Length: " + str3.length() + " String: " + str3);
  }
}

出力:

Using toString()
Length: 1 String: t
Using valueOf()
Length: 1 String: t
Using empty string concatenation
Length: 1 String: t

Unicode 補足多言語面(SMP)の文字のフェッチ

まれに、文字列に基本 Unicode 多言語プレーンに存在しない文字が含まれている場合があります。例としては、一連の絵文字や絵文字があります。これらの文字は、Unicode 補足多言語面(SMP)の一部です。

上記のアプローチは、これらのキャラクターには機能しません。codePointAt() メソッドを使用して、文字列からそのような文字をフェッチできます。このメソッドは、そのインデックスの文字の Unicode 値を表す整数を返します。これらの文字を表示するには、適切なフォントがインストールされていることを確認してください。

public class Demo
{
	public static void main(String[] args)
	{
		String s = "😀 the grinning emoji";
		for(int i=0; i<s.length();)
		{
			int codePoint = s.codePointAt(i);
			char[] charArr = Character.toChars(codePoint);//More than one characters may be required to represent an SMP char 
			System.out.print(new String(charArr) + " ");
			
			i = i + Character.charCount(codePoint);//Increase i according to the number of chars required for that SMP char
		}
	}
}

出力:

😀   t h e   g r i n n i n g   e m o j i 

charAt() メソッドを使用して同じ文字列を出力しようとすると、次の出力が得られます。

public class Demo
{
    public static void main(String args[])
    {
      String s = "😀 the grinning emoji";
		for(int i=0; i<s.length(); i++)
		{
			char c = s.charAt(i);
			System.out.print(c + " ");
		}
    }
}

出力:

? ?   t h e   g r i n n i n g   e m o j i 

まとめ

文字列は、配列と同様に、ゼロベースのインデックス付けに従います。charAt() メソッドを使用して、文字列から個々の文字を取得できます。文字列を文字の配列に変換し、インデックスを使用して個々の文字をフェッチすることもできます。単一の文字を文字ではなく文字列として使用する場合は、Character.toString() または String.valueOf() メソッドを使用して変換します。文字列に基本多言語面外の文字が含まれている場合があります。このような場合、charAt() メソッドの代わりに codePointAt() メソッドを使用できます。

関連記事 - Java String