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

Java实现从指定URL文本提取猫狗对应数据并转为数组的方法咨询

Java实现从URL文本提取Dog/Cat数值并存入数组

嘿,我正好做过类似的需求,给你一套清晰的实现方案,分步骤来:

核心思路

  1. 通过Java网络API读取目标URL里的文本内容,逐行处理
  2. 对每一行判断是dog还是cat的条目,提取对应的数值
  3. 把提取到的数值分别存入集合(方便动态添加),最后转成数组

完整代码示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:29:05