如何计算csv文件中一行的字符数

How to count the number of characters in a line in a csv file

我有一个 Justice_League.csv 文件,其中有四行,它们之间有逗号。我想计算每行中的字符数并将该数字转换为十六进制。

以下是Justice_League.csv的内容:

Bruce Wayne,Batman,None,Gotham City,Robin,The Joker                 43      2B
Oliver Queen,Green Arrow,None,Star City,Speedy,Deathstroke          50      32
Clark Kent,Superman,Flight,Metropolis,None,Lex Luthor               46      2E
Bart Allen,The Flash,Speed,Central City,Kid Flash,Professor Zoom    52      34

如您所见,我已经手数了字符并在其旁边写下了十六进制值。现在我需要在 Java 内完成这项工作。这是我到目前为止所拥有的。有人可以帮我吗?

public String convertCSVToFlat (Exchange exchange) throws Exception {
    String csv="Justice_League.csv";
    BufferedReader bReader = new BufferedReader(new FileReader(csv));
    String line = "";
    int count = 0;
    String str[] = new String[200];
    int[] a = new int[24];
    String[] hexNumber = new String[4];
    try {
        bReader.readLine();
        int characterSum = 0;
        int i = 0;  
        while((line = bReader.readLine()) != null) {
             String[] f=line.split(",");
             a[count]=Integer.parseInt(f[2]);
             str[count]=f[1];            
             count++;
             characterSum += line.length();
             hexNumber[i] = Integer.toHexString(characterSum);
             i++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    bReader.close();
    return hexNumber.toString();

我建议你阅读String.split的javadoc。我认为您在执行此操作时误解了这个概念:

String[] f=line.split(",");

a[count]=Integer.parseInt(f[2]); //--> java.lang.NumberFormatException here!

避免在代码中使用 'magic' 个数字,例如 int[] a = new int[24];。为什么是 24?

嗯,这是一个可以做你想做的事情的版本。也许这不是最好的方法,但它确实有效。

public void convertCSVToFlat () throws Exception {
    String csv="Justice_League.csv";
    BufferedReader bReader = new BufferedReader(new FileReader(csv));
    
    //We're storing the values at this 3 arraylists, 
    //but a better approach is using an object to hold'em
    ArrayList<String> lines = new ArrayList<String>();
    ArrayList<Integer> chars = new ArrayList<Integer>();
    ArrayList<String> hex = new ArrayList<String>();
    
    String line = "";
    try {
        while((line = bReader.readLine()) != null) {
            lines.add(line);
            //I'm assuming that you don't want to count the commas and spaces.
            //If you want to, comment the next line
            line = line.replaceAll(",", "").replaceAll(" ", "");
            int c = line.length(); //count remaining chars...
            chars.add(c);
            hex.add(Integer.toHexString(c));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    bReader.close();
    
    //Just to show the results
    for (int i = 0; i < lines.size(); i++) {
        System.out.print(lines.get(i));
        System.out.print("\t" + chars.get(i));
        System.out.println("\t" + hex.get(i));
    }
}

正如我之前所说,这是解决此问题的一种方法。您应该尝试其他选项来解决这个问题,以提高您的知识...