在 Java 中通過索引獲取字串中的字元

Mohammad Irfan 2023年10月12日
  1. Java 中使用 charAt() 方法獲取字串字元
  2. 使用 String.valueOf() 方法將字元轉換為字串
  3. Java 中從字串獲取字元陣列
  4. 獲取 Unicode 補充多語言平面 (SMP) 的字元
  5. 總結
在 Java 中通過索引獲取字串中的字元

本教程介紹瞭如何在 Java 中通過索引獲取 String 字元,並列出了一些示例程式碼來理解該主題。

字串用於儲存字元序列。就像陣列一樣,字串也遵循從零開始的索引。這意味著字串的第一個字元被分配了一個索引值為零。我們可以使用它們的索引從字串中獲取單個字元。在本教程中,我們將學習如何做到這一點。

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() 方法將此字元型別轉換為字串,甚至可以使用 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() 方法將字元轉換為字串

從字串中獲取字元後,如果需要,我們可以使用 String.valueOf() 方法將字元轉換為字元。

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 物件的最簡單和隱式的方法之一。

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 中從字串獲取字元陣列

我們可以藉助方括號通過索引獲取陣列元素。如果我們將字串轉換為字元型別陣列,我們可以從中獲取任何字元。

Java 提供了一個方便的 toCharArray() 方法,它返回一個字元陣列。我們可以在字串上使用這個方法併為它獲取一個字元陣列。

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

我們可以使用上一節中描述的方法將字元轉換為字串。

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() 方法來轉換它。有時我們的字串可能包含基本多語言平面之外的字元。在這種情況下,我們可以使用 codePointAt() 方法而不是 charAt() 方法。

相關文章 - Java String