Flutter:在dart中的某个字符数之后修剪字符串

np8igboo  于 2023-02-25  发布在  Flutter
关注(0)|答案(6)|浏览(227)

假设我有一个n个字符的字符串,但我想把它削减到10个字符(假设字符串总是大于10个字符),我不知道字符串的内容。
怎么修成这样?
我知道如何在某个角色之后修剪它

String s = "one.two";

//Removes everything after first '.'
String result = s.substring(0, s.indexOf('.'));
print(result);

但如何删除后,一定数量的字符?

yqhsw0fo

yqhsw0fo1#

所有的答案(使用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
}

印刷品

➜ dart main.dart
Hello 😀 
Hello 😀 W

使用substring时,您甚至可能得到半个字符(这是无效的):

print(str.substring(0, 7)); // BAD
print(str.characters.take(7)); // GOOD

印刷品:

Hello �
Hello 😀
qmb5sa22

qmb5sa222#

如果string的长度小于trimmed length,上面的例子就会失败。下面的代码可以处理短字符串和长字符串:

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);
}

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

ifmq2ha2

ifmq2ha23#

我想这应该行得通。

String result = s.substring(0, 10);
qnzebej0

qnzebej04#

String裁剪为一定数量的字符。下面的. code非常好用:

// initialise your string here
  String s = 'one.two.three.four.five';

  // trim the string by getting the first 10 characters
  String trimmedString = s.substring(0, 10);

  // print the first ten characters of the string
  print(trimmedString);

输出:

one.two.th

我希望这能帮上忙

pprl5pva

pprl5pva5#

您可以通过多种方式来实现这一点。

  1. 'string'.substr(start, ?length)用途:-'one.two.three.four.five'.substr(0, 10)
  2. 'string'.substring(start, ?end)用途:-'one.two.three.four.five'.substring(0, 10)
  3. 'string'.slice(start, ?end)用途:-'one.two.three.four.five'.slice(0, 10)
ncecgwcz

ncecgwcz6#

要按指定字符修剪所有尾随/右侧字符,请使用以下方法:

static String trimLastCharacter(String srcStr, String pattern) {   
    if (srcStr.length > 0) {   
      if (srcStr.endsWith(pattern)) { 
        final v = srcStr.substring(0, srcStr.length - 1 - pattern.length);
        return trimLastCharacter(v, pattern);
      } 
      return srcStr; 
    }   
    return srcStr;
  }

例如,您希望删除小数点后的所有0

$123.98760000

那就叫它过去吧

trimLastCharacter("$123.98760000", "0")

输出:

$123.9876

相关问题