回答:
以下のため、各ごとに最も簡単な方法char
ではString
使用することですtoCharArray()
:
for (char ch: "xyz".toCharArray()) {
}
これにより、for-eachコンストラクトが簡潔になりますが、残念ながらString
(これは不変です)、防御コピーを実行して、char[]
(変更可能です)多少のコストがかかります。
ドキュメントから:
[
toCharArray()
戻り値] この文字列の長さであり、その内容がこの文字列で表される文字シーケンスを含むように初期化される、新しく割り当てられた文字配列。
配列の文字を反復するより詳細な方法(通常のforループCharacterIterator
など)がありますが、コストを支払うことをいとわない場合toCharArray()
は、最も簡潔です。
toCharArray( )
3回呼び出されますか?
211900000
場合、完了までにかかる時間for (char c : str.toCharArray()) { }
は約250ミリ秒で、完了するまでの時間for (char c : charArray) { }
は<10ミリ秒です。もちろん、これらの時間値はハードウェアに依存しますが、1つの方法は他の方法よりもかなりコストがかかるということを覚えておいてください。
toCharArray()
ループ本体の内部にはありません。それは1回だけ呼び出され、ループは結果の配列を反復処理します。(for-eachループはfor
、反復ごとに停止条件を評価する一般的な-loop とは異なります。)
String s = "xyz";
for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
}
toCharArray
Stringクラスの()メソッドを使用して、Stringオブジェクトをcharの配列に変換する必要があります。
String str = "xyz";
char arr[] = str.toCharArray(); // convert the String object to array of char
// iterate over the array using the for-each loop.
for(char c: arr){
System.out.println(c);
}
でJavaの8我々はとしてそれを解決することができます。
String str = "xyz";
str.chars().forEachOrdered(i -> System.out.print((char)i));
chars()メソッドIntStream
はdocで述べたようにを返します:
このシーケンスからchar値をゼロ拡張するintのストリームを返します。サロゲートコードポイントにマップする文字は、解釈されずに渡されます。ストリームの読み取り中にシーケンスが変更された場合、結果は未定義です。
forEachOrdered
していませんかforEach
?の動作forEach
は明示的に非決定的です。ストリームが定義された遭遇順序を持っている場合、はストリームの遭遇順序でforEachOrdered
このストリームの各要素に対してアクションを実行します。したがって、注文が保持されることは保証されません。詳細については、この質問も確認してください。forEach
codePoints()
印刷にも使用できます。詳細については、この回答を参照してください。
残念ながら、JavaはString
実装していませんIterable<Character>
。これは簡単に実行できます。ありますがStringCharacterIterator
、それも実装されていませんIterator
...自分で作成してください:
public class CharSequenceCharacterIterable implements Iterable<Character> {
private CharSequence cs;
public CharSequenceCharacterIterable(CharSequence cs) {
this.cs = cs;
}
@Override
public Iterator<Character> iterator() {
return new Iterator<Character>() {
private int index = 0;
@Override
public boolean hasNext() {
return index < cs.length();
}
@Override
public Character next() {
return cs.charAt(index++);
}
};
}
}
これで、(ある程度)簡単に実行できますfor (char c : new CharSequenceCharacterIterable("xyz"))
...
Java 8を使用する場合chars()
、a String
を使用してa Stream
の文字を取得できますがint
、char
をchars()
返すので、a にキャストし直す必要がありますIntStream
。
"xyz".chars().forEach(i -> System.out.print((char)i));
EclipseコレクションでJava 8を使用する場合は、CharAdapter
クラスforEach
メソッドをラムダまたはメソッド参照とともに使用して、のすべての文字を反復処理できますString
。
Strings.asChars("xyz").forEach(c -> System.out.print(c));
この特定の例では、メソッド参照も使用できます。
Strings.asChars("xyz").forEach(System.out::print)
注:私はEclipseコレクションのコミッターです。
この場合はラムダを使用することもできます。
String s = "xyz";
IntStream.range(0, s.length()).forEach(i -> {
char c = s.charAt(i);
});
Travers a Stringを使用することもできます charAt()
では、文字列と一緒にます。
お気に入り :
String str = "xyz"; // given String
char st = str.charAt(0); // for example we take 0 index element
System.out.println(st); // print the char at 0 index
charAt()
特定の文字の文字列をトラバースするのに役立つ、Javaでの文字列処理のメソッドです。
for (char st: "xyz".toCharArray()) {}
?