【发布时间】:2020-11-22 08:05:15
【问题描述】:
我有一个小问题,我想将一个字符串子串化为最多 30 个字符,但是当我执行 string.substring(0, 30) 时,如果字符串是 30+ 个字符,它可以正常工作,但如果不是,它会出现错误。
有人知道怎么解决吗?
【问题讨论】:
-
你遇到了什么错误?
-
你能告诉我当前的代码吗?
我有一个小问题,我想将一个字符串子串化为最多 30 个字符,但是当我执行 string.substring(0, 30) 时,如果字符串是 30+ 个字符,它可以正常工作,但如果不是,它会出现错误。
有人知道怎么解决吗?
【问题讨论】:
你应该得到 "RangeError: Value not in range: 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.substring(0, min(30, string.length));
【讨论】:
import 'dart:math';
string.substring(0, min(30, string.length));
在上图中,可以看到below30和above30这2个变量
substring(int start, [int? end]);
当我们像这样使用below30.substring(0,30)
我们得到RangeError (end): Invalid value: Not in inclusive range 0..15: 30
错误。因为 below30 长度为 15.above30 会给出正确的结果,因为它有 32 字符。
所以克服这个问题你可以这样使用:
string.substring(0, min(30, string.length));
min(num a, num b)=> 返回两个数字中较小的一个。 num(抽象类)可能是double 或int。所以这里我们没有收到任何错误invalid range。
为了便于使用,您可以使用below30.characters.take(30),不再复杂。
@@atreeon。
对于批量数据操作substring 方法将比takemethod 快得多
Build time: 3812 ms
Time substring: 391 ms, Time take: 1828 ms
Build time: 4172 ms
Time substring: 406 ms, Time take: 2141 ms
【讨论】: