39

Dart文字列が文字のリストとして扱われていません。forループを使用する必要があると思いますが、これは不十分です。

4

7 に答える 7

55

別の実装(基本多言語面外の文字を操作する):

"A string".runes.forEach((int rune) {
  var character=new String.fromCharCode(rune);
  print(character);
});
于 2013-09-18T23:10:10.467 に答える
29

splitメソッドListを使用して、文字のを生成することもできます。

input.split('').forEach((ch) => print(ch));
于 2019-07-30T23:13:28.403 に答える
24

残念ながら、文字列は現在反復可能ではないため、このようなforループを使用する必要があります

for(int i=0; i<s.length; i++) {
  var char = s[i];
}

Dartには文字クラスがないため、string[index]は別の文字列を返すことに注意してください。

于 2012-02-15T09:00:01.143 に答える
6

フラッターキャラクタークラス付き

import 'package:flutter/material.dart';
var characters = aString.characters;
于 2021-05-04T01:16:18.523 に答える
2

extension on String {
  //toArray1 method
  List toArray1() {
    List items = [];
    for (var i = 0; i < this.length; i++) {
      items.add(this[i]);
    }
    return items;
  }

  //toArray2 method
  List toArray2() {
    List items = [];
    this.split("").forEach((item) => items.add(item));
    return items;
  }
}

main(List<String> args) {
  var str = "hello world hello world hello world hello world hello world";
  final stopwatch1 = Stopwatch()..start();
  print(str.toArray1());
  print('str.toArray1() executed in ${stopwatch1.elapsed}');

  final stopwatch2 = Stopwatch()..start();
  print(str.toArray2());
  print('str.toArray2() executed in ${stopwatch2.elapsed}');


}

上記はforループとforeachを使用した例ですが、私がテストした結果、foreachはforループよりもはるかに高速に動作しています。私が間違っていたら申し訳ありませんが、それは私のテストでした。

于 2019-12-24T08:51:44.800 に答える
2

を適切に反復するための拡張String

extension on String {

  /// To iterate a [String]: `"Hello".iterable()`
  Iterable<String> iterable() sync* {
    for (var i = 0; i < length; i++) {
      yield this[i];
    }}}

次のように使用します。

expect("Hello".iterable(), ["H", "e", "l", "l", "o"]);

ただし、 Charactersパッケージを追加した場合:

import "package:characters/characters.dart"; 

String次に、単純な文字またはUnicode書記素の両方を使用して適切に反復する拡張機能を使用できます。

extension on String {

  /// To iterate a [String]: `"Hello".iterable()`
  /// This will use simple characters. If you want to use Unicode Grapheme
  /// from the [Characters] library, passa [chars] true.
  Iterable<String> iterable({bool unicode = false}) sync* {
    if (unicode) {
      var iterator = Characters(this).iterator;
      while (iterator.moveNext()) {
        yield iterator.current;
      }
    } else
      for (var i = 0; i < length; i++) {
        yield this[i];
      }
  }
}

それが機能することを証明するには:

  test('String.iterable()', () {
    expect("Hello".iterable(), ["H", "e", "l", "l", "o"]);
    expect("Hello".iterable(unicode: true), ["H", "e", "l", "l", "o"]);

    expect("".iterable().length, 2);
    expect("".iterable().map((s) => s.codeUnitAt(0)), [55357, 56842]);

    expect("".iterable(unicode: true).length, 1);
    expect("".iterable(unicode: true), [""]);
  });
于 2021-02-25T15:07:31.953 に答える
1

これも解決策になる可能性があります:簡単だと思ったらそれを使ってください

String text = "findlastcharacter";
var array = text.split('');
array.forEach((element) { 
 print(element); // iterating char by char 
});
String lastchar = array[array.length - 1];
print('last char is = $lastchar'); // last char is = r

ありがとう

于 2022-02-23T12:29:03.637 に答える