【问题标题】:Extracting fields from .csv file input line从 .csv 文件输入行中提取字段
【发布时间】:2015-11-21 08:00:28
【问题描述】:

我是 Java 编程领域的新手,虽然我知道这是一个非常简单的问题,但我似乎无法以一种能找到我需要的答案的方式来表达我的搜索......所以希望这个社区的人不会介意帮助我的。

我的程序需要从 .csv 文件中获取输入行并将其拆分为数组的字段,使用逗号作为分隔符。然后将数组的字段分配给不同数据类型的变量 - char、int、float 和 string。我正在努力解决的是我的字符串变量的格式。

这是我的代码的一部分:

public void parseCSV(String inputLine) {

String[] splitFields;
splitFields = inputLine.split(",");

try {
    empNumber = Integer.parseInt(splitFIelds[0[);
    payType = splitFields[1].charAt(0);
    hourlyRate = Float.parseFloat(splitFields[2]);
    last name =

我需要将变量 lastName(一种字符串数据类型)分配给我的 splitFields 数组的位置 3。我只是不知道如何格式化它。非常感谢您的帮助!

【问题讨论】:

    标签: java arrays csv split


    【解决方案1】:

    对整体方法的警告

    如果您正在使用简单的 csv 文件进行家庭作业,请选择其他答案,但在逗号字符 , 上拆分字符串适用于更复杂的 CSV。示例:

    "Roberts, John", Chicago
    

    这应该读作两个单元格,其中第一个字符串是Roberts, John, 上的简单拆分将读取为 三个 单元格:"RobertsJohn"Chicago

    你应该做什么(对于健壮的代码)

    如果您正在编写严肃/生产级别的代码,您应该使用 Apache Commons CSV library 来解析 CSV。逗号和引号有足够多的棘手问题,可能的格式有足够多的变化,因此使用成熟的库是有意义的。没有理由重新发明轮子。

    另一个解析文本的工具

    如果您是初学者,这可能会引起很多麻烦,但解析/验证文本输入的强大工具是“正则表达式”。正则表达式可用于将字符串与模式匹配并提取字符串的一部分。从 csv 的特定单元格中提取字符串后,您可以使用正则表达式来验证字符串是否为您期望的格式。

    虽然您不太可能真的需要这个项目的正则表达式,但我想我会提到它。

    【讨论】:

    • 对于未来的项目,我一定会牢记正则表达式和 Apache Commons CSV 库。作为一个自称菜鸟,我还没有真正达到那个水平,但很高兴知道。谢谢!
    【解决方案2】:

    String.split(...) 返回一个String[],所以你真的可以只为String 分配一个特定的索引。

    String s = "one two dog!";
    String[] sa = s.split(" ");
    String ns = sa[1]; // ns now equals "two"
    

    所以你可以:

    last_name = splitFields[index]; // this will work fine as long as index is within the `array` bounds.
    

    请注意您的 last name 变量有一个空格(这可能是您的问题)。

    如果您尝试解析非十进制值,我还建议注意解析,Integer.parseInt(...)Float.parseFloat(...) 可能是 throwNumberFormatException

    【讨论】:

    • 空格只是一个错字 - 它在我的程序中显示为 lastName。不过,谢谢你抓住它。 :) 我刚刚学习了异常,我尝试了...catch 来希望能捕捉到这些异常。谢谢!
    • 你应该看看@MatthewGunn 的回答,他有一个重要的观点。
    【解决方案3】:

    很简单,它已经是String,因此您不必执行额外的解析。下面的任务就可以解决问题:

    lastName = splitFields[3];
    

    【讨论】:

    • 我知道这不会是一个复杂的答案 - 不知道只是令人恼火。这正是我所需要的。谢谢!
    猜你喜欢
    • 2014-07-26
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2012-07-25
    • 2018-05-18
    • 2019-11-15
    • 2021-11-01
    相关资源
    最近更新 更多