var seconds = 5;
print("Send $seconds seconds ago");
var harryLikes = 'Silvia';
var otherName = 'Erik';
var otherLikes = 'Chess';
print("Harry like $harryLikes");
print("I think $otherName like $otherLikes");
test('String.format extension works', () {
// Given
const String text = 'Today is %1\$ and tomorrow is %2\$';
final List<String> placeHolders = List<String>()..add('Monday')..add('Tuesday');
const String expected = 'Today is Monday and tomorrow is Tuesday';
// When
final String actual = text.format(placeHolders);
// Then
expect(actual, expected);
});
import 'package:format/format.dart';
// Base of string defined BEFORE the "seconds" variable which can be created and subbed in later
const String MESSAGE = 'Send {seconds} seconds ago';
// Define "seconds"
int seconds = 1234;
// Sub in the value of "seconds". Prints "Send 1234 seconds ago"
print(MESSAGE.format({'seconds': seconds});
7条答案
按热度按时间polkgigr1#
Dart支持字符串插值
更复杂的表达式也可以用
${...}
嵌入数字类型和
intl
包提供了更多格式化数字和日期的方法。例如:
dced5bon2#
将以下内容添加到
pubspec.yaml
然后运行pub install。
接下来,导入dart-sprintf:
import 'package:sprintf/sprintf.dart';
实施例编号
输出
Sends 5.00 seconds ago.
Harry likes Cats, I think Dilki likes Dogs.
来源:https://pub.dartlang.org/packages/sprintf
xytpbqjk3#
如果你想要类似于Android(
Today is %1$ and tomorrow is %2$
)的字符串插值,你可以创建一个顶级函数,或者一个可以做类似事情的扩展。在这个例子中,我保持它类似于Android字符串,因为我目前正在移植一个Android应用程序(插值格式以1而不是0开始)顶层功能
然后你可以调用
interpolate(STRING_TO_INTERPOLATE, LIST_OF_STRINGS)
,你的字符串将被插值。扩展名
您可以创建一个扩展函数,它执行类似于Android
String.format()
的操作这将允许您调用
text.format(placeHolders)
测试
几个测试证明浓度:-
qvsjd97n4#
如前所述,我还使用了sprintf包,但沿着使用了String类的方便扩展。
因此,在将包依赖项
sprintf: "^4.0.0"
添加到pubspecs.yaml中的依赖项列表后,创建一个新的Dart文件,其中包含Spring类的扩展,并提供如下格式方法:导入包含StringFormatExtension扩展名的dart文件后,您可以键入以下内容:
感觉就像在Java(我来自哪里)。
nuypyhwy5#
我用的是老式的方法
w7t8yxp56#
你也可以有这样简单的东西:
7lrncoxx7#
现在有一个包,它的工作方式非常类似于Python的
format
函数。https://pub.dev/packages/format
我认为通常更好的解决方案是@Günter Zöchbauer提出的,但像
format
这样的包确实有它的位置。我发现,当我希望在一些变量可能发生变化的情况下获得大多数预先录制的错误消息时,它最有帮助。下面是一个使用示例:
接受的答案不允许已经创建的字符串有一个变量,
format
包比其他使用replaceAll
或其他等价物的答案更干净。