【问题标题】:How to substring 0 to 30, but only if there is over 30 characters如何子串 0 到 30,但前提是有超过 30 个字符
【发布时间】:2020-11-22 08:05:15
【问题描述】:

我有一个小问题,我想将一个字符串子串化为最多 30 个字符,但是当我执行 string.substring(0, 30) 时,如果字符串是 30+ 个字符,它可以正常工作,但如果不是,它会出现错误。

有人知道怎么解决吗?

【问题讨论】:

  • 你遇到了什么错误?
  • 你能告诉我当前的代码吗?

标签: string flutter substring


【解决方案1】:

你应该得到 "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);

【讨论】:

    【解决方案2】:

    试试这个

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

    【讨论】:

      【解决方案3】:

      有点短,没有检查

      string.characters.take(30)
      

      【讨论】:

        【解决方案4】:

        导入“飞镖:数学”; string.substring(0, min(30, string.length));

        【讨论】:

          【解决方案5】:
          import 'dart:math';
          string.substring(0, min(30, string.length));
          

          在上图中,可以看到below30above30这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(抽象类)可能是doubleint。所以这里我们没有收到任何错误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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-08-19
            • 1970-01-01
            • 1970-01-01
            • 2021-01-02
            • 2019-01-17
            • 1970-01-01
            相关资源
            最近更新 更多