【问题标题】:Dart: How to Truncate String and add Ellipsis after character numberDart:如何截断字符串并在字符编号后添加省略号
【发布时间】:2019-04-20 21:31:04
【问题描述】:

我想在某个字符长度后为字符串添加省略号,如果字符串长度未达到字符预设字符长度,则不应添加省略号 (...)。

我如何在 Dart 语言中实现这一点?

【问题讨论】:

    标签: dart ellipsis


    【解决方案1】:

    使用如下容器包装您的 Text 小部件

    请阅读下面代码中的注释行

    class TruncatedText extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
      return Scaffold(
        appBar: AppBar(),
    
        body: Container(
          //Here you can control the width of your container ..
          //when text exceeds it will be trancated via elipses...
          width: 130.0,
          child: Text('I have a trancated text',
            style: TextStyle(fontSize: 20),
    
            softWrap: false,
            overflow: TextOverflow.ellipsis,
          ),
        ),
      );
    }
    

    }

    编辑:

    你可以使用这个纯 dart 代码,因为原始解决方案适用于 Flutter

    void main() {
      String to_be_truncated = "Dart is excellent but flutter is awesome";
      int truncateAt = to_be_truncated.length-1;//if you use to_be_truncated.lengh no truncation will happen
      String elepsis = "..."; //define your variable truncation elipsis here 
      String truncated ="";
    
      if(to_be_truncated.length > truncateAt){
         truncated = to_be_truncated.substring(0,truncateAt-elepsis.length)+elepsis; 
      }else{
        truncated = to_be_truncated;
      } 
       print(truncated);
    }
    

    【讨论】:

    • 这是一个飞镖问题,而不是扑朔迷离!
    • 检查添加的纯 Dart 代码,感谢您的评论,我想我写原始答案时是在颤抖过量:)
    【解决方案2】:

    你可以这样做:

    String truncateWithEllipsis(int cutoff, String myString) {
      return (myString.length <= cutoff)
        ? myString
        : '${myString.substring(0, cutoff)}...';
    }
    

    【讨论】:

      【解决方案3】:

      您可以为此使用replaceRange 方法。

      replaceRange

        var text = 'Hello World!';
        var r = text.replaceRange(7, text.length, '...');
        print(r); // -> Hello W...
      

      这是一个完整的例子:

      String truncate(String text, { length: 7, omission: '...' }) {
        if (length >= text.length) {
          return text;
        }
        return text.replaceRange(length, text.length, omission);
      }
      
      void main() {
        print(truncate('Hello, World!', length: 4));
      }
      

      【讨论】:

      • 当字符串长度小于 maxChars 时这不起作用
      • 你是对的。因此,您必须先检查字符串长度。
      【解决方案4】:

      您可以在字符串上使用扩展:

      extension StringExtension on String {
        String truncateTo(int maxLength) =>
            (this.length <= maxLength) ? this : '${this.substring(0, maxLength)}...';
      }
      

      然后

      'My Very Long Text'.truncateTo(7); // My Very...
      

      【讨论】:

        【解决方案5】:

        创建 extensions.dart 文件。

        String truncateString(String data, int length) {
          return (data.length >= length) ? '${data.substring(0, length)}...' : data;
        }
        

        将此用作自定义扩展。

        用法

        import 'package:project/util/extensions.dart';
        
        truncateString('Sam Trio', 5)
        

        【讨论】:

          【解决方案6】:

          以下方法建立在以前的答案之上,具有以下优点:

          • 在字符串上使用扩展
          • 即使要截断的字符串短于限制也可以工作(无范围错误)
          • 使用单字符默认省略号(“...”)
          • 在确定要截断多少时考虑省略号,确保省略号不会使字符串最终超过最大长度。
          
          extension StringExtension on String {
            /// Truncate a string if it's longer than [maxLength] and add an [ellipsis].
            String truncate(int maxLength, [String ellipsis = "…"]) => length > maxLength
                ? '${substring(0, maxLength - ellipsis.length)}$ellipsis'
                : this;
          }
          
          

          【讨论】:

            【解决方案7】:

            再举一个例子。

            /// truncate the [String] without cutting words. The length is calculated with the suffix.
            extension Truncate on String {
              String truncate({required int max, String suffix = ''}) {
                return length < max
                    ? this
                    : '${substring(0, substring(0, max - suffix.length).lastIndexOf(" "))}$suffix';
              }
            }
            

            一个例子如何使用

            print('hello world two times!'.truncate(max: 15, suffix: '...'));
            

            结果是hello world...

            【讨论】:

              猜你喜欢
              • 2021-10-24
              • 2023-03-27
              • 2015-03-11
              • 1970-01-01
              • 2011-04-05
              • 2013-09-15
              • 2015-11-03
              • 2023-03-09
              • 1970-01-01
              相关资源
              最近更新 更多