逗号分隔的记录转换为字符串数组?

3
我正在尝试读取包含由逗号分隔的记录的文件的BufferedReader。我想要将两个逗号之间的每个字符串(或记录)拆分,去除双引号,并将它们中的每一个放入String数组的索引中。例如:
假设我在文件中有这行内容: ("0001","00203","82409"(换行符) "0002","00204","82500"(换行符) 等等)
我想把0001放入String数组[1], 我想把00203放入String数组[2], 以此类推....
以下代码遍历文件,将所有记录放入第二列中的String数组[2]。这意味着,在执行下面的代码后,如果我执行System.out.println(arr[2]),它将打印00203和00204,而我希望array[2]是00203,array[5]是00204。
这是我的代码:
public String[] getArray(String source) {

FileInputStream fileinput = new FileInputStream(source);
GZIPInputStream gzip = new GZIPInputStream(fileinput);
InputStreamReader inputstream = new InputStreamReader(gzip);
BufferedReader bufr = new BufferedReader(inputstream);

String str = null;
String[] arr = null;
    while((str = bufr.readLine()) != null) {
    arr = str.replace("\"", "").split("\\s*,\\s*");
}
return arr;
4个回答

1

Commons CSV是为您特定的用例而设计的。让我们不要重复造轮子,下面的代码将导致一个GZipped CSV被解析成字段和行,似乎正是您想要做的。

public String[][] getInfo() throws IOException {
    final CSVParser parser = new CSVParser(new FileReader(new InputStreamReader(new GZIPInputStream(fileinput)), CSVFormat.DEFAULT.withIgnoreSurroundingSpaces(true));
    String[][] result = parser.nextRecord().values();
    return result;
}

0
你尝试过使用Scanner类和scanner.nextInt()吗?这样就不需要进行striping了。
Scanner s = new Scanner(inputstream);
ArrayList<String> list = new ArrayList<String>();

while (s.hasNextInt())
    list.add(s.nextInt());
String[] arr = list.toArray(new String[list.size()]);

0

这些修改中有一些可能适用于您。

public String[] getArray(String source) {

FileInputStream fileinput = new FileInputStream(source);
GZIPInputStream gzip = new GZIPInputStream(fileinput);
InputStreamReader inputstream = new InputStreamReader(gzip);
BufferedReader bufr = new BufferedReader(inputstream);

String str = null;
List<String> numbers = new LinkedList<String>;

while((str = bufr.readLine()) != null) {
   String[] localArr = str.split(",");
   for(String intString : localArr){
    numbers.add(intString.trim());
   }
}
return arr;

0

未经测试:

arr = str.replaceAll("\"", "").replaceAll("(","").replaceAll(")","").split(",");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接