我没有看到 Dart 字符串被视为字符列表。我假设我必须使用 for 循环,这会很蹩脚。
问问题
26886 次
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
扩展以正确迭代 a 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";
然后你可以有一个扩展来正确地迭代 aString
使用简单字符或 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 回答
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 回答
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 回答