读取CSV文件并将其拆分为数组(Java)

时间:2017-02-12 19:23:20

标签: java csv

这是我目前的代码:

public static String findPhoneNumber(Scanner input, String name) {
    String[] arr;
    while (input.hasNextLine()){
        arr = name.split(DELIMITER);
        input.nextLine();
        for (int i=0;i<=arr.length;i++) {
            if (arr[0].endsWith(name)) {
                return (arr[3]);
            }
            else {
                return("Nothing to return");
            }
        }
    }
    CSV.testFindPhoneNumber(arr[3]);
}


package com.company;

import java.io.IOException;
import java.net.URL;
import java.util.Scanner;

public class CSV {
public static final String CSV_FILE_URL = "https://orb.essex.ac.uk/ce/ce152/data/staff.csv";

public static void main(String[] args) throws IOException {
    URL url = new URL(CSV_FILE_URL);
    Scanner input = new Scanner(url.openConnection().getInputStream());
    testFindPhoneNumber(input);
}

public static void testFindPhoneNumber(Scanner input){
    System.out.println("### Testing findPhoneNumber");
    for (String name : new String[]{"Kruschwitz", "Vickers", "Voelker"}){
        String result = TestCSV.findPhoneNumber(input,name);
        System.out.println("name= " + name + ", result= " + result);
    }
  }
}

我试图将excel文件(我的代码中包含的URL)拆分为3个元素数组,然后找到用公共类CSV编写的名称,以打印这些名称的相应电话号码。

不知道该怎么做。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

您的代码有很多问题。让我们快速回顾最重要的事情:

public static String findPhoneNumber(Scanner input, String name) {
String[] arr;

错误的命名。什么是 arr 应该做什么?给它一个名字,告诉它应该是什么意思。

while (input.hasNextLine()){
    arr = name.split(DELIMITER);

为什么要拆分名称?名称是进入方法的固定参数?!

    input.nextLine();

您正在读取一行...但不存储该结果。换句话说:您阅读了整个输入,但不要处理任何

可能你的意思是String line = input.nextLine();然后你的方法想要处理来自URL文件的line

    for (int i=0;i<=arr.length;i++) {
        if (arr[0].endsWith(name)) {
            return (arr[3]);
        }
        else {
            return("Nothing to return");
        }
    }

我不知道你想通过这种比较实现什么。然后:从不返回一些&#34;消息&#34;表示错误(对于返回字符串的方法)。该方法的调用者应该如何理解出错?

所以:不是返回消息,而是抛出异常或返回null。

最后:你完全是在为自己烦恼。不要尝试从远程URL读取CSV,在一步中拆分和处理所有输入。相反:首先编写只读取该URL的代码,然后打印数据。然后,当它运行良好时,编写单独的代码来执行&#34;匹配&#34;你想做普通的字符串输入。最后,把这些东西放在一起。

再次:简单split(",") 适用于任意CSV数据。 CSV要复杂得多。不要试图重新发明轮子;尤其是当你处于这样的初学者水平时。

答案 1 :(得分:0)

您的主要课程,即 CSV 对我来说很好。问题在于在主类中调用的方法 findPhoneNumber 。以下是它的修正版本。

ret <- as.list(rep(NA, length(MergedData))); ret[[i]]<-row

这是输出。

  

测试findPhoneNumber

     

name = Kruschwitz,结果= 5A.542

     

name = Vickers,result = 5A.528

     

name = Voelker,result = null