如何子串 0 到 30,但前提是超过 30 个字符

How to substring 0 to 30, but only if there is over 30 characters

我有一个小问题,我想对一个字符串进行子串化,最多 30 个字符,但是当我这样做时 string.substring(0, 30),如果字符串超过 30 个字符,它工作正常,但如果不是,它会出现出现错误。

有谁知道如何解决这个问题?

您应该得到 “RangeError:值不在范围内:30” 错误。

尝试在此之前添加一个长度控制

if (string.length < 30)

  return string;

else

  return string.substring(0, 30);

让我们缩短上面的代码:

String resultText = (string.length < 30) ? string : string.substring(0, 30);

试试这个

return string.substring(0, string.length < 30 ? string.length : 30);

短一点,没有检查

string.characters.take(30)

进口'dart:math'; string.substring(0, min(30, string.length));

import 'dart:math';
string.substring(0, min(30, string.length));

在上图中,可以看到2个变量below30above30

substring(int start, [int? end]);

当我们这样使用时below30.substring(0,30) 我们得到 RangeError (end): Invalid value: Not in inclusive range 0..15: 30 error.Becasue below30 长度为 15above30 将给出正确的结果,因为它有 32 个字符。

所以克服这个问题你可以这样使用:

string.substring(0, min(30, string.length));

min(num a, num b)=> Returns 两个数中的较小者。 num (abstract class) 可能 doubleint. 所以这里我们没有得到任何错误 invalid range.

为了方便使用你可以使用below30.characters.take(30)没有更多的复杂性。 @@atreeon.

对于批量数据操作 substring 方法将比 take 方法

快得多
Build time: 3812 ms
Time substring: 391 ms, Time take: 1828 ms

Build time: 4172 ms
Time substring: 406 ms, Time take: 2141 ms