首页 > 解决方案 > scanner.useDelimiter 不适用于基于 Web 的 CSV 文件

问题描述

所以我是Java的初学者,我很难学习,所以请放轻松。我正在研究一种解决方案,该解决方案将用户输入英国货币并找到用户输入国家/地区的汇率。不知道我是否走在正确的轨道上,但下面是用户输入要转换的货币金额和国家后的代码。我需要读取基于 Web 的 CSV 文件并解析为 POJO,但我无法让 in.useDelimiter 工作。

public static Double findExchangeRateAndConvert(String currencyType, double amount) throws IOException {


        URL url = new URL("https://www.gov.uk/government/uploads/system/uploads/attachment_data/file/842362/exrates-monthly-1119.csv");
        try (var in = new Scanner(
                new BufferedReader(
                        new InputStreamReader(url.openStream())))) {


            var line = "";
            in.useDelimiter(",");
            while (in.hasNextLine()) {
                line = in.nextLine();

                System.out.println(line);

                if (line.contains(currencyType)) {
                    System.out.println("I found it.");
                    System.exit(0);
                }

                }

            }

        return null;
    }

标签: javacsvpojo

解决方案


使用您的扫描仪一次读取一行,然后根据正则表达式拆分该行。逐行处理是一种很好的方法,因为它很容易理解正在发生的事情。

public class Main {

public static void main(String[] args) throws IOException {
    Double d = Main.findExchangeRateAndConvert("USD", 12);

    System.out.println("d=" + d);
}

public static Double findExchangeRateAndConvert(String currencyType, double amount) throws IOException {


    URL url = new URL("https://www.gov.uk/government/uploads/system/uploads/attachment_data/file/842362/exrates-monthly-1119.csv");
    try (var in = new Scanner(
            new BufferedReader(
                    new InputStreamReader(url.openStream())))) {


        var line = "";
        in.useDelimiter(",");
        while (in.hasNextLine()) {
            line = in.nextLine();

            System.out.println(line);

            String[] splitLine = line.split(",");
            if (splitLine[2].equals(currencyType)) {
                System.out.println("I found it.");
                return Double.valueOf(splitLine[3]);
            }
        }
    }

    return null;
}

}


推荐阅读