Java 将文本从文件存储到数组

Java 将文本从文件存储到数组,java,arrays,file,Java,Arrays,File,我有一个文本文件,看起来像这样 {{"12","13","2","5"}, {"14","14","1","4"}, {"36","30","1","9"}} 我想把它存储在数组中 上述同一文件中的数组大小为3x4 其中,文件的每行有4个字符串,有3个这样的行 所以数组应该是这样的 array[0][1]="12" array[0][2]="13" array[0][3]="2" array[0][4]="5" array[1][1]="14" array[1][2]="14" array

我有一个文本文件,看起来像这样

{{"12","13","2","5"},
 {"14","14","1","4"},
 {"36","30","1","9"}}
我想把它存储在数组中 上述同一文件中的数组大小为3x4 其中,文件的每行有4个字符串,有3个这样的行 所以数组应该是这样的

array[0][1]="12"
array[0][2]="13"
array[0][3]="2"
array[0][4]="5"
array[1][1]="14"
array[1][2]="14"
array[1][3]="1"
array[1][4]="4"
array[2][1]="36"
array[2][2]="30"
array[2][3]="1"
array[2][4]="9"

任何算法、植入、建议都将被应用

您可以使用
replaceAll
split
这样做:

public static void main(String[] args) throws Exception {
    final String input = "{{\"12\",\"13\",\"2\",\"5\"},{\"14\",\"14\",\"1\",\"4\"},{\"36\",\"30\",\"1\",\"9\"}}";
    final String[] rows = input.replaceAll("^\\{\\{|}}$", "").split("},\\{");
    final String[][] transformed = new String[rows.length][];
    for (int i = 0; i < rows.length; ++i) {
        final String[] columns = rows[i].replaceAll("^\"|\"$", "").split("\",\"");
        transformed[i] = new String[columns.length];
        System.arraycopy(columns, 0, transformed[i], 0, columns.length);
    }
    System.out.println(Arrays.deepToString(transformed));
}
如果使用
列表
,则它看起来更像:

public static void main(String[] args) throws Exception {
    final String input = "{{\"12\",\"13\",\"2\",\"5\"},{\"14\",\"14\",\"1\",\"4\"},{\"36\",\"30\",\"1\",\"9\"}}";
    final String[] rows = input.replaceAll("^\\{\\{|}}$", "").split("},\\{");
    final List<List<String>> transformed = new ArrayList<>();
    for (final String row : rows) {
        final String[] columns = row.replaceAll("^\"|\"$", "").split("\",\"");
        final List<String> transformedRow = new ArrayList<>();
        for (final String data : columns) {
            transformedRow.add(data);
        }
        transformed.add(transformedRow);
    }
}
publicstaticvoidmain(字符串[]args)引发异常{
最后一个字符串输入=“{\'12\',\'13\',\'2\',\'5\',{\'14\',\'14\',\'1\',\'4\',{\'36\',\'30\',\'1\',\'9\'}”;
最后一个字符串[]rows=input.replaceAll(“^\\{\\{}}$”,“”)。split(“},\\{”);
转换后的最终列表=新的ArrayList();
用于(最后一行字符串:行){
最后一个字符串[]列=row.replaceAll(“^\”|\“$”,”).split(“\”,\”);
最终列表transformedRow=新的ArrayList();
for(最终字符串数据:列){
transformedRow.add(数据);
}
transformed.add(transformedRow);
}
}

索引中的循环数越少,代码就越清晰,但真正痛苦的是
字符串的处理,因此您不会获得太多的收益。

我假设每一行只能包含一行

  • <代码>{{a、、b、c}、
  • {“a”、“b”、“c”},
  • {“a”、“b”、“c”}
  • 换句话说,每行可以以
    {
    {
    开头,以
    }、
    }、
    结尾

    你需要做的是

  • 逐行读取文件
  • 删除所有
    {
    }
    以及开头和结尾处的引号,这样您将只得到
    a”、“b”、“c
  • ,“
    上拆分结果以获取数组
    [a、b、c]
  • 将该数组放入结果数组中
  • 您的代码可以如下所示(您可以使用表示文件位置的文件,而不是包含文件中数据的字符串):


    如果您使用的是Java8,那么也可以使用streams

    List<String[]> rows = Files.lines(Paths.get("input.txt"))
        .map(s -> s.replaceAll("[\\s{]\\{\"|\"\\}[,}]", ""))
        .map(s-> s.split("\",\""))
        .collect(Collectors.toList());
    
    List rows=Files.line(path.get(“input.txt”))
    .map(s->s.replaceAll(“[\\s{]\\{\”\\\\“\\\}[,}],”)
    .map(s->s.split(“\”,\”)
    .collect(Collectors.toList());
    
    函数breakIntoArray=(字符串s)->{
    s=s.replaceAll(“}”和“);
    s=s.replaceAll(“\\{,”);
    s=s.replaceAll(“\”,“);
    返回s.split(“,”);
    };
    Path tradePath=Path.get(“xxx.txt”);
    Files.lines(tradePath).map(breakIntoArray.collect(Collectors.toList());
    
    看起来像JSON数据,是吗?是的,它是JSON的一种,但它是我从另一个软件获得的输出,现在我想将它们存储在数组中以供进一步使用processing@BoristheSpider这不是有效的json。对于正确的json,必须用方括号替换卷曲括号,因为值没有关联的键。是的,它不是json格式t问题是如何提取值,因为没有统一的花括号来使用拆分方法或分隔符。您的文件总是在一行中有一行吗?您知道文件中将有多少行吗?您可以使用集合(列表)而不是数组吗?
    int rows = 3;
    String[][] result = new String[rows][];
    
    String data = "{{\"12\",\"13\",\"2\",\"5\"},\r\n"
            + " {\"14\",\"14\",\"1\",\"4\"},\r\n"
            + " {\"36\",\"30\",\"1\",\"9\"}}";
    Scanner sc = new Scanner(data);
    
    for (int i=0; i<rows; i++){
        String line = sc.nextLine();
        line = line.replaceAll("[\\s{]\\{\"|\"\\}[,}]", "");
        result[i]=line.split("\",\"");
    }
    sc.close();
    
    for (String[] arr : result)
        System.out.println(Arrays.toString(arr));
    
    [12, 13, 2, 5]
    [14, 14, 1, 4]
    [36, 30, 1, 9]
    
    List<String[]> rows = Files.lines(Paths.get("input.txt"))
        .map(s -> s.replaceAll("[\\s{]\\{\"|\"\\}[,}]", ""))
        .map(s-> s.split("\",\""))
        .collect(Collectors.toList());
    
        Function<String, String[]> breakIntoArray = (String s)->{
            s = s.replaceAll("}", "");
            s = s.replaceAll("\\{", "");
            s = s.replaceAll("\"", "");
            return s.split(",");
        };
    
        Path tradePath = Paths.get("xxx.txt");
        Files.lines(tradePath).map(breakIntoArray).collect(Collectors.toList());