Java读取文件中嵌套列表并提取内部数字的实现方法
提取嵌套列表中的数字:两种实用方案
你已经用File和Scanner完成了文件读取的第一步,接下来咱们可以通过两种方式来提取那些内层列表里的数字,根据你的场景选就行:
方案一:纯字符串处理(无额外依赖)
如果你的数据格式很规整(没有多余空格或特殊字符),直接做字符串清洗+分割就够了,步骤很简单:
- 把文件内容读取成一个完整的字符串
- 去掉所有的方括号
[和] - 用逗号
,分割成单个数字的字符串数组 - 把每个字符串转成整数
给你写个完整的代码示例:
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class NestedListParser { public static void main(String[] args) { try { File f = new File("route.txt"); Scanner scanner = new Scanner(f); // 读取整个文件内容(假设文件里只有那一段嵌套列表) String content = scanner.useDelimiter("\\Z").next(); scanner.close(); // 去掉所有方括号 String cleanedContent = content.replaceAll("[\\[\\]]", ""); // 按逗号分割成数字字符串 String[] numberStrings = cleanedContent.split(","); // 遍历并处理每个数字 for (String numStr : numberStrings) { // 去掉可能的空格(如果有的话) numStr = numStr.trim(); if (!numStr.isEmpty()) { int number = Integer.parseInt(numStr); // 这里就可以用你的数字做操作了 System.out.println("提取到数字:" + number); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (NumberFormatException e) { System.err.println("格式错误,无法转换为整数:" + e.getMessage()); } } }
方案二:用JSON解析库(更稳健)
如果你的嵌套结构可能有变化,或者想更优雅地处理层级关系,用JSON解析库会更靠谱,比如Google的Gson或者Jackson。这里以Gson为例:
- 先添加Gson依赖(如果用Maven的话,在pom.xml里加):
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> <!-- 用最新版本就行 --> </dependency>
- 把文件内容转换成嵌套的
List结构,然后逐层遍历提取数字:
import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.io.File; import java.io.FileNotFoundException; import java.util.List; import java.util.Scanner; public class JsonNestedParser { public static void main(String[] args) { try { File f = new File("route.txt"); Scanner scanner = new Scanner(f); String content = scanner.useDelimiter("\\Z").next(); scanner.close(); Gson gson = new Gson(); // 定义嵌套列表的类型:外层是List,每个元素是List<List<Integer>> TypeToken<List<List<List<Integer>>>> typeToken = new TypeToken<>() {}; List<List<List<Integer>>> nestedLists = gson.fromJson(content, typeToken.getType()); // 逐层遍历提取数字 for (List<List<Integer>> middleList : nestedLists) { for (List<Integer> innerList : middleList) { for (int number : innerList) { // 这里使用你的数字 System.out.println("提取到数字:" + number); } } } } catch (FileNotFoundException e) { e.printStackTrace(); } } }
这个方案的好处是能保留原有的层级结构,如果之后需要用到不同层级的列表,直接操作对应的List就行,比纯字符串处理更灵活。
内容的提问来源于stack exchange,提问作者Nobi
相关产品推荐
相关产品推荐

