如何子串 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个变量below30
和above30
substring(int start, [int? end]);
当我们这样使用时below30.substring(0,30)
我们得到 RangeError (end): Invalid value: Not in inclusive range 0..15: 30
error.Becasue below30
长度为 15
。above30
将给出正确的结果,因为它有 32
个字符。
所以克服这个问题你可以这样使用:
string.substring(0, min(30, string.length));
min(num a, num b)
=> Returns 两个数中的较小者。 num (abstract class) 可能 double
或 int
. 所以这里我们没有得到任何错误 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
我有一个小问题,我想对一个字符串进行子串化,最多 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个变量below30
和above30
substring(int start, [int? end]);
当我们这样使用时below30.substring(0,30)
我们得到 RangeError (end): Invalid value: Not in inclusive range 0..15: 30
error.Becasue below30
长度为 15
。above30
将给出正确的结果,因为它有 32
个字符。
所以克服这个问题你可以这样使用:
string.substring(0, min(30, string.length));
min(num a, num b)
=> Returns 两个数中的较小者。 num (abstract class) 可能 double
或 int
. 所以这里我们没有得到任何错误 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