在文本文件中解析的最干净的方法
Cleanest way of parsing in a text file
然后将每行分成三部分并将这些部分放入单独的 String[] arrays
?
所以目前我正在通过 BufferedReader
/FileReader
导入文件,将每一行添加到 ArrayList<String>
。看起来像:
String line;
ArrayList<String> thing = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new FileReader(
"file.txt"));
while (true) {
line = reader.readLine();
if (line == null) {
break;
}
thing.add(line);
}
reader.close();
每个的内容然后在基本的 for 循环中被解析为 String[] array
。
String[] array = new String[thing.size()];
for(i=0;i<thing.size();i++) {
array[i] = thing.get(i)
}
这就是我到目前为止所了解的。
正在导入的数据格式如下:
Euro (EUR), 1.359, €
US Dollars (USD), 1.34, $
我知道 split
以及类似于 \s*,\s*
的正则表达式可能会被用来将字符串拆分成它的各个部分,但就此而言我的想法是零。
问题:我将如何进一步拆分字符串。
例如,将字符串的每个第一部分放入一个名为 currency
的数组中,将字符串的每个第二部分放入一个名为 factor
的数组中,依此类推。
您可以在 for 循环中使用 split(",")
将每个字符串拆分为另外三个部分,然后将它们添加到适当的数组中:
List<String> thing = new ArrayList<>();
thing.add("Euro (EUR), 1.359, €");
String[] currency = new String[thing.size()];
String[] factor = new String[thing.size()];
String[] sign = new String[thing.size()];
for(int i=0;i<thing.size();i++) {
String parts[] = thing.get(i).split(",");
currency[i] = parts[0];
factor[i] = parts[1];
sign[i] = parts[2];
}
System.out.println(currency[0] + " " + factor[0] + " " + sign[0]);
输出:
欧元 (EUR) 1.359 €
您只需要用 \s*,\s*
拆分您的行(而不是 +
,因为它至少需要一个 space),然后将这 3 个部分存储在 3 个列表中。与读取文件以存储每一行然后迭代 List
以拆分并添加到 arrays
(Other option code
) 相比,此选项更容易。
您可以在读取文件的循环中完成所有操作:
String line;
String[] lineSplit;
ArrayList<String> currencyList = new ArrayList<>();
ArrayList<String> factorList = new ArrayList<>();
ArrayList<String> symbolList = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
while ((line = reader.readLine()) != null) {
lineSplit = line.split("\s*,\s*");
if (lineSplit.length == 3) {
currencyList.add(lineSplit[0]);
factorList.add(lineSplit[1]);
symbolList.add(lineSplit[2]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
如果最后需要数组:
String[] currency = currencyList.toArray(new String[0]);
String[] factor = factorList.toArray(new String[0]);
String[] symbol = symbolList.toArray(new String[0]);
然后将每行分成三部分并将这些部分放入单独的 String[] arrays
?
所以目前我正在通过 BufferedReader
/FileReader
导入文件,将每一行添加到 ArrayList<String>
。看起来像:
String line;
ArrayList<String> thing = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new FileReader(
"file.txt"));
while (true) {
line = reader.readLine();
if (line == null) {
break;
}
thing.add(line);
}
reader.close();
每个的内容然后在基本的 for 循环中被解析为 String[] array
。
String[] array = new String[thing.size()];
for(i=0;i<thing.size();i++) {
array[i] = thing.get(i)
}
这就是我到目前为止所了解的。
正在导入的数据格式如下:
Euro (EUR), 1.359, €
US Dollars (USD), 1.34, $
我知道 split
以及类似于 \s*,\s*
的正则表达式可能会被用来将字符串拆分成它的各个部分,但就此而言我的想法是零。
问题:我将如何进一步拆分字符串。
例如,将字符串的每个第一部分放入一个名为 currency
的数组中,将字符串的每个第二部分放入一个名为 factor
的数组中,依此类推。
您可以在 for 循环中使用 split(",")
将每个字符串拆分为另外三个部分,然后将它们添加到适当的数组中:
List<String> thing = new ArrayList<>();
thing.add("Euro (EUR), 1.359, €");
String[] currency = new String[thing.size()];
String[] factor = new String[thing.size()];
String[] sign = new String[thing.size()];
for(int i=0;i<thing.size();i++) {
String parts[] = thing.get(i).split(",");
currency[i] = parts[0];
factor[i] = parts[1];
sign[i] = parts[2];
}
System.out.println(currency[0] + " " + factor[0] + " " + sign[0]);
输出:
欧元 (EUR) 1.359 €
您只需要用 \s*,\s*
拆分您的行(而不是 +
,因为它至少需要一个 space),然后将这 3 个部分存储在 3 个列表中。与读取文件以存储每一行然后迭代 List
以拆分并添加到 arrays
(Other option code
) 相比,此选项更容易。
您可以在读取文件的循环中完成所有操作:
String line;
String[] lineSplit;
ArrayList<String> currencyList = new ArrayList<>();
ArrayList<String> factorList = new ArrayList<>();
ArrayList<String> symbolList = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
while ((line = reader.readLine()) != null) {
lineSplit = line.split("\s*,\s*");
if (lineSplit.length == 3) {
currencyList.add(lineSplit[0]);
factorList.add(lineSplit[1]);
symbolList.add(lineSplit[2]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
如果最后需要数组:
String[] currency = currencyList.toArray(new String[0]);
String[] factor = factorList.toArray(new String[0]);
String[] symbol = symbolList.toArray(new String[0]);