Dart如何单行输入空格分隔的字符串/数字列表元素
Dart 适配单行空格分隔列表输入的实现方案
核心修改思路
原代码通过循环逐行读取单个列表元素,仅支持每行一个数字的输入模式。要适配第二行以空格分隔输入全部n个元素的场景,核心是将逐行读单个值的逻辑,替换为一次性读取第二行完整字符串,按空白分割后批量转换为整数即可,无需引入第三方依赖。
修改后可直接运行的完整代码
import 'dart:io'; void main() { int? n = int.parse(stdin.readLineSync()!); print("value of n: $n and run time type: ${n.runtimeType}"); List<int> list1 = []; // 读取第二行整行输入,去除首尾空白后按连续空白分割 String inputLine = stdin.readLineSync()!.trim(); List<String> elements = inputLine.split(RegExp(r'\s+')); for (int i = 0; i < n; i++) { list1.add(int.parse(elements[i])); } print("List 1: $list1"); }
关键逻辑说明
- 用
trim()处理输入字符串的首尾空白,避免用户在行首、行尾误输入多余空格、换行符,导致分割出空字符串触发解析报错 - 分割字符串时使用正则
RegExp(r'\s+')匹配一个或多个连续空白字符,兼容输入时数字间打了多个空格、误按Tab键的场景,容错性更高 - 替换原代码的
insert方法为add方法,由于是按顺序向列表尾部追加元素,不需要指定插入索引,执行效率更高
运行效果验证
当输入格式为:
5 1 2 3 4 5
程序输出结果和原逐行输入模式完全一致:
value of n: 5 and run time type: int List 1: [1, 2, 3, 4, 5]
如果需要同时兼容「逐行输入n个元素」和「单行空格输入n个元素」两种输入模式,可以增加一层判断:如果读取到的第二行内容分割后长度为1,就继续循环读取剩余的n-1行输入即可,可按需调整逻辑。
内容的提问来源于stack exchange,提问作者Taufiq Ahommed Neloy
相关产品推荐
相关产品推荐

