Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在Dart中反转字符串?_String_Flutter_Dart_Split_Reverse - Fatal编程技术网

String 如何在Dart中反转字符串?

String 如何在Dart中反转字符串?,string,flutter,dart,split,reverse,String,Flutter,Dart,Split,Reverse,我有一个字符串,我想把它颠倒过来。例如,我正在编写一个用于反转字符串的AngularDart过滤器。这只是为了演示,但它让我想知道如何反转字符串 例如: Hello, world 应变成: dlrow ,olleH 我也应该考虑使用Unicode字符的字符串。例如:'Ame\u{301}lie' 哪种简单的方法可以反转字符串,即使它有?以下是在Dart中反转ASCII字符串的一种方法: input.split('').reversed.join(''); 拆分每个字符上的字符串,创建一个列

我有一个字符串,我想把它颠倒过来。例如,我正在编写一个用于反转字符串的AngularDart过滤器。这只是为了演示,但它让我想知道如何反转字符串

例如:

Hello, world
应变成:

dlrow ,olleH

我也应该考虑使用Unicode字符的字符串。例如:

'Ame\u{301}lie'


哪种简单的方法可以反转字符串,即使它有?

以下是在Dart中反转ASCII字符串的一种方法:

input.split('').reversed.join('');
  • 拆分每个字符上的字符串,创建一个列表
  • 生成反转列表的迭代器
  • 加入列表(创建新字符串)
  • 注意:这不一定是反转字符串的最快方法。请参阅其他答案以了解备选方案

    注意:这不能正确处理所有unicode字符串。

    尝试此函数

    字符串反转(字符串s){
    var chars=s.splitChars();
    var len=s.长度-1;
    var i=0;
    而(我
    (或)

    字符串反转(字符串s){
    StringBuffer sb=新的StringBuffer();
    对于(int i=s.length-1;i>=0;i--){
    某人加上(s[i]);
    }
    使某人返回字符串();
    }
    main(){
    打印(反面为“你好,世界”);
    }
    
    我为几个不同的备选方案制定了一个小型基准:

    String reverse0(String s) {
      return s.split('').reversed.join('');
    }
    
    String reverse1(String s) {
      var sb = new StringBuffer();
      for(var i = s.length - 1; i >= 0; --i) {
        sb.write(s[i]);
      }
      return sb.toString();
    }
    
    String reverse2(String s) {
      return new String.fromCharCodes(s.codeUnits.reversed);
    }
    
    String reverse3(String s) {
      var sb = new StringBuffer();
      for(var i = s.length - 1; i >= 0; --i) {
        sb.writeCharCode(s.codeUnitAt(i));
      }
      return sb.toString();
    }
    
    String reverse4(String s) {
      var sb = new StringBuffer();
    
      var i = s.length - 1;
    
      while (i >= 3) {
        sb.writeCharCode(s.codeUnitAt(i-0));
        sb.writeCharCode(s.codeUnitAt(i-1));
        sb.writeCharCode(s.codeUnitAt(i-2));
        sb.writeCharCode(s.codeUnitAt(i-3));
        i -= 4;
      }
    
      while (i >= 0) {
        sb.writeCharCode(s.codeUnitAt(i));
        i -= 1;
      }
    
      return sb.toString();
    }
    
    String reverse5(String s) {
      var length = s.length;
      var charCodes = new List(length);
      for(var index = 0; index < length; index++) {
        charCodes[index] = s.codeUnitAt(length - index - 1);
      }
    
      return new String.fromCharCodes(charCodes);
    }
    main() {
      var s = "Lorem Ipsum is simply dummy text of the printing and typesetting industry.";
    
      time('reverse0', () => reverse0(s));
      time('reverse1', () => reverse1(s));
      time('reverse2', () => reverse2(s));
      time('reverse3', () => reverse3(s));
      time('reverse4', () => reverse4(s));
      time('reverse5', () => reverse5(s));
    }
    
    该库包含一个围绕字符串的轻量级包装器,使字符串的行为类似于一个不可变的字符列表:

    import 'package:more/iterable.dart';
    
    void main() {
      print(string('Hello World').reversed.join());
    }
    

    这个问题没有很好的定义。反转任意字符串没有意义,会导致输出中断。第一个(可克服的)障碍是Utf-16。Dart字符串编码为Utf-16,仅反转代码单位会导致无效字符串:

    var input = "Music \u{1d11e} for the win"; // Music There is a utils package that covers this function. It has some more nice methods for operation on strings.

    Install it with :

    dependencies:
      basic_utils: ^1.2.0
    

    var input=“音乐\u{1d11e}赢取”//Music有一个utils软件包包含此功能。它有一些更好的字符串操作方法

    安装时请使用:

    String reverseStringUsingSplit(String input) {
      var chars = input.split('');
      return chars.reversed.join();
    }
    
    用法:

    String reversed=StringUtils.reverse(“helloworld”);
    
    Github:


    在Dart中有很多方法可以反转字符串,下面给出了其中一些方法

    使用拆分和联接:

    String reverseStringUsingRunes(String input) {
      var chars = input.runes.toList();
    
      return String.fromCharCodes(chars.reversed);
    }
    
    String reverseStringUsingCodeUnits(String input) {
      return String.fromCharCodes(input.codeUnits.reversed);
    }
    
    void main() {
      var coflutter = 'Coflutter';
    
      print(reverseStringUsingSplit(coflutter));
      print(reverseStringUsingRunes(coflutter));
      print(reverseStringUsingCodeUnits(coflutter));
    }
    
    

使用符文:

    String reverseStringUsingRunes(String input) {
      var chars = input.runes.toList();
    
      return String.fromCharCodes(chars.reversed);
    }
    
    String reverseStringUsingCodeUnits(String input) {
      return String.fromCharCodes(input.codeUnits.reversed);
    }
    
    void main() {
      var coflutter = 'Coflutter';
    
      print(reverseStringUsingSplit(coflutter));
      print(reverseStringUsingRunes(coflutter));
      print(reverseStringUsingCodeUnits(coflutter));
    }
    
    

使用代码单位:

    String reverseStringUsingRunes(String input) {
      var chars = input.runes.toList();
    
      return String.fromCharCodes(chars.reversed);
    }
    
    String reverseStringUsingCodeUnits(String input) {
      return String.fromCharCodes(input.codeUnits.reversed);
    }
    
    void main() {
      var coflutter = 'Coflutter';
    
      print(reverseStringUsingSplit(coflutter));
      print(reverseStringUsingRunes(coflutter));
      print(reverseStringUsingCodeUnits(coflutter));
    }
    
    您可以简单地使用像这样的所有方法

    所有3种方法的输出都将是


    Ref:

    这不是一种快速的方法,因为它创建了一个列表。如果你有一个大长度的字符串,它会创建许多字符串。输入字符串中每个代码单元一个字符串。这不是有效的方法。梅佐尼是对的:他的解决方案更简单、更快。谢谢。我会澄清我的回答不是为了最快的方式。@FlorianLoitsch我用上面的测试“Ame\u{301}lie”,结果是相反的。这失败的字符串是什么<代码>打印('Ame\u{301}lie'.split('').reversed.join('')==>
    eiĺemA
    这不是正确的倒数。重音在“l”而不是“e”。另外:这只是一个例子,符文需要按顺序排列。如果你有代理对,那就更糟了:“音乐为赢”。你能举个例子说明这一点吗。现在有很多答案对于许多输入来说都不正确,因为您没有指定具有严格限制的用例,所以反转字符串是有效的。到目前为止,没有一个答案能用简单的输入,比如
    'Ame\u{301}lie'
    @FlorianLoitsch,我正在写一个角度滤波器作为演示。制作一个反转字符串的过滤器很简单。我将在问题中澄清我的用例是什么。这是因为在较高级别的答案中描述的原因而被打破的。我从这个简单的问答中学到了很多东西,现在我想知道
    toLowerCase
    toUpperCase
    @André我认为他是说假设所有语言都有大写/小写他们性格的表现。。。类似于在表情符号UTF32代码中调用
    toLowerCase
    ,类似于
    \u{1d11e}@mFeinstein,它也可能是指类似的情况,这些情况可能会导致不正确的比较,具体取决于当地的希腊语:像ά∑ος这样的词在所有大写字母中都应该是∑∑∑∑∑∑(无变音),但Ά∑ος(带变音)在一句话的开头。不是一个大的加法,而是一个递减的for循环,而不是最后一个例子中的递增循环,理论上应该使它更快。最后一个是错误的。但是基准测试提供了有用的信息。太好了!time()方法?那是某种包装的吗?