Flutter:在 dart 中的特定 NUMBER 个字符后修剪字符串

Nit*_*Sai 4 dart flutter

假设我有一个包含 n 个字符的字符串,但我想将其缩减为仅 10 个字符。(鉴于该字符串始终大于 10 个字符)我不知道字符串的内容。

这样怎么修剪呢?

我知道如何在某个字符后修剪它

String s = "one.two";

//Removes everything after first '.'
String result = s.substring(0, s.indexOf('.'));
print(result);
Run Code Online (Sandbox Code Playgroud)

但是如何在一定数量的字符后删除它?

Max*_*lin 7

如果字符串的长度小于修剪的长度,上面的示例将失败。下面的代码适用于短字符串和长字符串:

import 'dart:math';

void main() {
  String s1 = 'abcdefghijklmnop';
  String s2 = 'abcdef';


  var trimmed = s1.substring(0, min(s1.length,10));
  print(trimmed);
  
  trimmed = s2.substring(0, min(s2.length,10));
  print(trimmed);
}
Run Code Online (Sandbox Code Playgroud)

注意: Dart 字符串例程在 UTF-16 代码单元上运行。对于大多数拉丁语和西里尔语来说,这不是问题,因为所有字符都适合单个代码单元。然而,表情符号、一些亚洲、非洲和中东语言可能需要 2 个代码单元来编码单个字符。例如''.length将返回 2,尽管它是单个字符串。请参阅字符包。


spk*_*ten 6

所有答案(使用substring)都获得前 10 个 UTF-16 代码单元,这与前 10 个字符不同,因为某些字符由两个代码单元组成。最好使用以下characters软件包:

import 'package:characters/characters.dart';

void main() {
  final str = "Hello  World";

  print(str.substring(0, 9)); // BAD
  print(str.characters.take(9)); // GOOD
}
Run Code Online (Sandbox Code Playgroud)

印刷

? dart main.dart
Hello  
Hello  W
Run Code Online (Sandbox Code Playgroud)

随着substring你甚至可能会得到半个字符(无效):

print(str.substring(0, 7)); // BAD
print(str.characters.take(7)); // GOOD
Run Code Online (Sandbox Code Playgroud)

印刷:

Hello ?
Hello 
Run Code Online (Sandbox Code Playgroud)