Java实现从指定URL文本提取猫狗对应数据并转为数组的方法咨询
Java实现从URL文本提取Dog/Cat数值并存入数组
嘿,我正好做过类似的需求,给你一套清晰的实现方案,分步骤来:
核心思路
- 通过Java网络API读取目标URL里的文本内容,逐行处理
- 对每一行判断是dog还是cat的条目,提取对应的数值
- 把提取到的数值分别存入集合(方便动态添加),最后转成数组
完整代码示例
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; import java.util.List; public class AnimalDataExtractor { public static void main(String[] args) { // 目标URL String urlString = "http://www.tlu.ee/~jaagup/veeb1/loomad.txt"; // 用于存储dog和cat的数值 List<Integer> dogValues = new ArrayList<>(); List<Integer> catValues = new ArrayList<>(); try { // 建立URL连接并读取内容 URL url = new URL(urlString); BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); String line; // 逐行读取文本 while ((line = reader.readLine()) != null) { line = line.trim(); // 去掉首尾空格 if (line.isEmpty()) continue; // 跳过空行 // 假设每行格式是 "dog: 10" 或者 "cat: 25" 这类,用冒号分隔 String[] parts = line.split(":"); if (parts.length != 2) { // 格式不符合的行跳过,或者可以加日志记录 continue; } String animalType = parts[0].trim().toLowerCase(); String valueStr = parts[1].trim(); try { int value = Integer.parseInt(valueStr); // 判断类型并添加到对应集合 if ("dog".equals(animalType)) { dogValues.add(value); } else if ("cat".equals(animalType)) { catValues.add(value); } } catch (NumberFormatException e) { // 数值解析失败的行,跳过或记录日志 System.out.println("无法解析数值: " + line); } } reader.close(); // 把集合转成数组(如果需要int数组的话) int[] dogArray = dogValues.stream().mapToInt(Integer::intValue).toArray(); int[] catArray = catValues.stream().mapToInt(Integer::intValue).toArray(); // 测试输出 System.out.println("Dog的数值数组:"); for (int num : dogArray) { System.out.print(num + " "); } System.out.println("\nCat的数值数组:"); for (int num : catArray) { System.out.print(num + " "); } } catch (IOException e) { e.printStackTrace(); System.out.println("读取URL内容失败,请检查网络或URL是否有效"); } } }
关键细节说明
- URL读取:用
URL.openStream()获取输入流,再用BufferedReader逐行读取,效率更高 - 数据解析:这里假设每行是
动物类型: 数值的格式,如果你的文本格式不同(比如用空格分隔),只需要修改split()的分隔符就行,比如改成split("\\s+") - 异常处理:处理了IO异常(网络问题、URL无效)和数值解析异常(非数字内容),避免程序崩溃
- 集合转数组:用Java 8的Stream API把
ArrayList<Integer>转成int[],如果需要Integer[]的话直接用dogValues.toArray(new Integer[0])就行
如果你的文本格式有特殊情况(比如一行多个数值),可以告诉我具体格式,我再帮你调整代码!
内容的提问来源于stack exchange,提问作者Sergei Frolov
相关产品推荐
相关产品推荐

