[英]Storing text from file to 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));
}
輸出:
[[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
處理才是痛苦的部分,因此您不會獲得太多收益。
我假設每一行只能以形式s包含一行
{{"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());
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.