如何在 Dart 中反转字符串:Dart 中的高效字符串反转技术

问题描述 投票:0回答:1

借助 StringBuffer 反转字符串 第一种方法利用 Dart 的 StringBuffer 类通过按相反顺序附加字符来高效地构造反转字符串。这种方法对于反转字符串来说是简单且高效的。

String firstReverse(String str) {
  StringBuffer reverseString = StringBuffer();

  for (int index = str.length-1; index >= 0; index--) {
    reverseString.write(str[index]);
  }

  return reverseString.toString();
}

借助 CodeUnit 反转字符串: 第二种方法使用 codeUnitAt 将输入字符串的每个字符转换为其 Unicode 代码点,将它们存储在列表中,就地反转列表,然后使用 String.fromCharCode

将 Unicode 代码点转换回字符。
String firstReverse(String str) {
  var stringToNumList = [];
  String reverseStr = '';

  for (var i = 0; i < str.length; i++) {
    stringToNumList.add(str[i].codeUnitAt(0));
  }

  int start = 0, last = stringToNumList.length - 1;

  while (start < last) {
    var temp = stringToNumList[start];
    stringToNumList[start] = stringToNumList[last];
    stringToNumList[last] = temp;
    start++;
    last--;
  }

  for (var i = 0; i < stringToNumList.length; i++) {
    reverseStr += String.fromCharCode(stringToNumList[i]);
  }

  return reverseStr;
}
string flutter dart reverse problem-spring
1个回答
0
投票

最有效的技术和解决潜在的权衡:

  1. 内置 runes.reversed 方法(Dart 2.13+)

如果您使用 Dart 2.13 或更高版本,这是简单字符串反转的最简洁且可能是性能最高的选项:

String reversedString = inputString.runes.reversed.join('');

此方法以相反的顺序迭代字符串的 Unicode 符文,并将它们有效地连接成一个新字符串。 2. 使用反向迭代进行拆分和连接

为了更广泛的兼容性和详细的迭代控制:

String reversedString = inputString.split('').reversed.join('');

将字符串拆分为字符,反转列表,然后将它们连接回来。 3. 字符串缓冲区

对于性能关键场景或当您需要对中间修改进行细粒度控制时:

StringBuffer buffer = StringBuffer();
for (int i = inputString.length - 1; i >= 0; i--) {
  buffer.write(inputString[i]);
}
String reversedString = buffer.toString();

向后迭代字符串,将字符附加到 StringBuffer 以高效构造反向字符串。 4. 递归方法

出于教育目的或处理更复杂的反转(例如,反转句子中的单词):

String reverseString(String inputString) {
  if (inputString.isEmpty) {
    return inputString;
  } else {
    return reverseString(inputString.substring(1)) + inputString[0];
  }
}

递归地将字符串分解成更小的部分,反转它们并将它们连接起来。 选择正确的技术:

对于现代 Dart 版本中的简单反转,通常首选 runes.reversed。 如果您需要更多控制或更广泛的兼容性,请考虑使用反向迭代进行拆分和连接。 对于性能关键的情况,StringBuffer 可能会很有用。 递归方法更适合学习或特定用例。 其他注意事项:

请记住,反转字符串涉及遍历字符,因此时间复杂度与字符串的长度直接相关。 如果您正在处理非常大的字符串并且性能至关重要,您可能会探索更高级的技术,例如低级内存操作或专用库。

© www.soinside.com 2019 - 2024. All rights reserved.