You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将解析数字范围的Java方法转换为功能等价的Dart代码?

数字范围字符串解析Dart实现

以下是和原Java逻辑完全对齐的Dart实现代码:

class RangeParser {
  static void main(List<String> args) {
    String ranges = "1,2,3-6,4-5";
    List<int> rangeList = getDistinctNumbers(ranges);
    print(rangeList); // 输出: [1, 2, 3, 4, 5, 6]
  }

  static List<int> getDistinctNumbers(String ranges) {
    return ranges
        .split(',')
        .map((s) => s.replaceAll(' ', ''))
        .map((rangeStr) => Range(rangeStr))
        .expand((range) => range.render())
        .toSet()
        .toList()
      ..sort();
  }
}

class Range {
  late final int start;
  late final int stop;

  Range(String rangeStr) {
    final rangeArray = rangeStr.split('-');
    final length = rangeArray.length;

    if (length < 1 || length > 2) {
      throw ArgumentError("Wrong number of arguments in a Range: $length");
    }

    start = int.parse(rangeArray[0]);
    stop = length == 1 ? start : int.parse(rangeArray[1]);

    if (stop < start) {
      throw ArgumentError("Stop before start!");
    }
  }

  List<int> render() {
    return List.generate(stop - start + 1, (index) => start + index);
  }
}

实现说明

  • 集合操作完全对应原Java逻辑:split拆分字符串、replaceAll去除空格、expand对应Java的flatMap展开范围序列
  • 用toSet()实现去重,效果和Java Stream的distinct()一致
  • 异常类型替换为Dart内置的ArgumentError,报错提示和原实现完全相同
  • 最终通过级联调用sort()完成排序,返回去重后的有序整数列表

内容的提问来源于stack exchange,提问作者Mohammad Mirshahbazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:45:04