如何用scanner读形如[[1,2],[2,3]]的输入并转为数组
时间: 2025-02-25 17:14:28 浏览: 40
为了使用 `Scanner` 将形如 [[1,2], [2,3]] 的字符串转换成二维数组,在 Java 中我们需要做一些额外的工作,因为 `Scanner` 并不会直接支持解析这种形式的输入。通常我们会结合正则表达式和其他内置函数一起工作。
下面是具体步骤以及相应的代码示范:
### 步骤一:获取原始输入
首先还是通过 `Scanner` 从命令行或者其他途径取得包含有目标信息的那个长串字符序列;比如说这里是“[[1,2],[2,3]]”。
### 步骤二:预处理获得纯净数据集
由于我们的最终目的是要把这个东西变成真正的二维整型数组,因此得去除掉所有非必要的符号,比如方括号 "[]" 和逗号 "," 等等只留下数字部分形成一个新的干净版本供后续操作时更方便一些。这一步可以用 replaceAll() 函数配合上合适的正则表达式完成任务。
### 步骤三:分割并转化为 Integer 列表
接下来把刚刚清理过的那一大段连续不断的数位依据每个元素之间的间隔空格拆分开来各自独立地存在了,然后再逐一遍历它们尝试着转变成对应的整形变量最后添加进一个 List<Integer> 集合里面去保存起来备用。
### 步骤四:填充至二维数组
有了上述已经准备好并且类型匹配良好的一组数值之后就很容易按照行列的形式组织排列起来了,只要简单计算一下总共有几项就能确定下来每边该分配给谁负责啦!
以下是完整实现方案:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 初始化Scanner实例
Scanner input = new Scanner(System.in);
String s=input.nextLine();
// 示例输入:"[[1,2],[2,3]]"
// 清洗输入文本
String cleanedInput=s.replaceAll("[\\[\\],]", "");
// 结果为:“1223”
// 分割清洗后的字符串,并将其映射回整数列表
String [] temp=cleanedInput.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");
ArrayList<Integer> tempList=new ArrayList<>();
for (String t :temp)
if(!t.isEmpty())
tempList.add(Integer.parseInt(t));
int rowSize=tempList.size()/2; // 假设总是完美适配两行
// 构建二维数组
int[][] resultArray = new int[rowSize][2];
for(int i=0;i<rowSize;++i){
resultArray[i][0]=tempList.get(i*2);
resultArray[i][1]=tempList.get(i*2 + 1);
}
// 打印结果验证正确性
printMatrix(resultArray);
input.close();
}
private static void printMatrix(int[][] matrix){
for (int[] array : matrix) {
System.out.println("["+array[0]+", "+array[1]+"]");
}
}
}
```
以上例子中我们假设了提供的输入必定是格式正确的且能平均分为两个子集合的情况下的最简化解决方案。如果面对的是更为复杂的情形,则需考虑增加更多的错误检测机制以保证算法鲁棒性和可靠性。
阅读全文
相关推荐


















