【问题标题】:Convert String into array in java在java中将String转换为数组
【发布时间】:2017-01-28 22:54:46
【问题描述】:

以下是我的 Java 代码。我正在传递一个 CSV 文件并读取记录。我想用“,”分割记录并将其存储到一个数组中。我不知道该怎么做。如果有人可以给我一个想法。我对 Java 还很陌生。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class parser 
{
    public static void main(String[] args) throws IOException 
    {
        FileReader fileReader = new FileReader(new File("//Users//Desktop//npi.csv"));
        BufferedReader br = new BufferedReader(fileReader);
        String line = null;
        //String[] value = line.split(",");

        /*ArrayList list = new ArrayList(Arrays.asList(line));
        System.out.println(list);*/
        int count = 0;
        while((line = br.readLine()) != null)
        {
            for(int i=0; i < line.length();i++)
            {

            }
            count ++;
            System.out.println("Record Count : "+count);
            System.out.println(line);
        }

    }
}

CSV 文件中的字符串示例

"1234567","1","","","","ALI","唐纳森","","DR.","","O.D.","",""," ","","","","","","","140-6002 SIT RD","STE A","EVANSVILLE","IN","8418996408","US","6013857469","9586771232","140-6002 SIT RD","SUITE 一个","埃文斯维尔","IN","770155917","美国","6969551228","2403884068","04/13/2003","02/21/2018","",""," ","M","","","","","","142K01234Z","5376UD","IN","Y","","","",""," ","","","","","","","","","","","","","","","","", "","","","","","","","","","","","","","","","","" ,"","","","","","","","","","","","","","","",""," ","","980230944","03","IN","","WR09447","01","IN","","12532T","02","IN","GROUP" ,"245699532","08","IN","","3HDPTO","09","IN","个人","","","","","","", "","","","","","","","","","","","","","","","","" ,"","","","","","","","","","","","","","","",""," ","","","","","","","","","","","","","","","","", "","","","","","","","","","","","","","","","","" ,"","","","","","","","","","","","","","","",""," ","","","","","","","","","","","","","","","","", "","","","","","","","","","","","","","","","","" ,"","","","","","","","","","","","","","","",""," ","","","","","","","","","","","","","","","","", "","","","","","","","","","","","","","","","","" ,““,““,““,““,““,““,““,“X”,””,””,” ","","","","","","","","","","","","","","","","", "",""

【问题讨论】:

  • 注释掉的代码中可能有什么好东西...
  • 我们已经编辑了您的数据,用随机生成的信息替换了真实姓名、电话号码、地址以及我只能假设的其他真实数据。请切勿在真实人物中使用数据。

标签: java


【解决方案1】:

您已使用Arrays.asList(line),但您应该使用Arrays.asList(value)。还注释了while 循环内的代码位置。

List 是一个接口,ArrayList 是一个实现。您不需要对象的实例类型来使用数据。只需使用一个接口。您还应该知道对接口进行编码 是 Java 中的最佳实践,也是一般 OOP 的原则之一。

对于单行,它需要List&lt;String&gt;,要保存这些行,您应该使用另一个列表List&lt;List&lt;String&gt;&gt;。您可以逐行实例化并向其添加列表。

【讨论】:

    【解决方案2】:

    使用“,”作为分隔符分割每一行:

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

    【讨论】:

      【解决方案3】:

      在您的代码中有一个错误:您试图拆分 null 的字符串。将其移至 line 指向实际 String 对象的 while 循环中。

      您想在"," 处拆分字符串,但我猜您还想删除",如果它是第一个或最后一个字符。

      这可以使用String.split(String regex)

      String[] split = x.split("(\",\"|\\A\"|\"\\z)");
      

      这个正则表达式在任何地方都匹配",",在字符串的开头/结尾匹配"。如果输入以引号开头,则结果数组以空字符串开头。

      请注意,使用输出数组要容易得多

      System.out.println( Arrays.toString(myArray) );
      

      【讨论】:

        【解决方案4】:

        首先定义一个您想要存储所有单词的列表:

        List&lt;String&gt; list = new ArrayList&lt;String&gt;();

        您的while 循环中不需要for 循环。摆脱它并改用以下方法:

        //Remove quotes. I think you wouldn't need them.
        line = line.replace("\"", "");
        //Now get the words which are separated by a comma
        String[] words = line.split(",");
        //Now add all the words to the main list
        Collections.addAll(list, words);
        

        【讨论】:

        • 这根本不是提问者想要的。他希望在每次出现"," 时拆分字符串。但是,您要删除引号,然后在 , 处拆分,这可能会产生不同的结果。除此之外,将数组复制到集合中是多余的。
        • @Aloso,不,我认为 OP 在那里打错了字。我读过那份声明。但是他为什么要以“,”为基础分割字符串是没有任何意义的。
        猜你喜欢
        • 2011-11-30
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 2014-03-23
        • 2014-03-03
        • 1970-01-01
        • 2017-12-25
        相关资源
        最近更新 更多