我有一个看起来像这样的文本文件
{{"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"
任何算法,植入,建议都将适用
答案 0 :(得分:0)
您可以使用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));
}
输出:
[[12, 13, 2, 5], [14, 14, 1, 4], [36, 30, 1, 9]]
如果你使用List<List<String>>
,那么它看起来更像是:
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);
}
}
通过索引减少循环使代码更清晰,但实际上String
处理是痛苦的部分,因此你没有获得太多。
答案 1 :(得分:0)
我将假设每一行只能包含一个表格中的一行
{{"a","b","c"},
{"a","b","c"},
{"a","b","c"}}
换句话说,每一行都可以以{{
或 {
开头,以},
或},
结尾。
您需要做的是
{
和}
以及开头和结尾的引号,以便您只获得a","b","c
","
以获取数组[a,b,c]
您的代码可能看起来像(而不是包含文件数据的String,您可以使用代表文件位置的File):
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]
如果您使用的是Java 8,还可以使用流
List<String[]> rows = Files.lines(Paths.get("input.txt"))
.map(s -> s.replaceAll("[\\s{]\\{\"|\"\\}[,}]", ""))
.map(s-> s.split("\",\""))
.collect(Collectors.toList());
答案 2 :(得分:0)
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());