的Java:阅读文本文件到一个数组
我有两列像这样由一个txt文件:的Java:阅读文本文件到一个数组
Name1 _ Opt1
Name2 _ Opt2
Name3 _ Opt3
在每一行中有一个名字,一个标签分隔符,一_,然后另一名;有很多行(约150000),我甚至不知道哪一个是最好的构造函数,我正在考虑一个二维数组,但如果它是一个更好的选择,它也可能是其他的东西。对我而言,能够访问具有像这样的元素[x] [y]的元素是非常重要的。 我已经这样做了,但我只是知道如何计算行数或如何将每行放在数组的不同位置。 下面的代码:
int countLine = 0;
BufferedReader reader = new BufferedReader(new FileReader(filename));
while (true) {
String line = reader.readLine();
if (line == null) {
reader.close();
break;
} else {
countLine++;
}
}
既然你不知道时间提前的行数,我会用一个ArrayList
而不是数组。将行分割为字符串值可以使用正则表达式轻松完成。
Pattern pattern = Pattern.compile("(.*)\t_\t(.*)");
List<String[]> list = new ArrayList<>();
int countLine = 0;
BufferedReader reader = new BufferedReader(new FileReader(filename));
while (true) {
String line = reader.readLine();
if (line == null) {
reader.close();
break;
} else {
Matcher matcher = pattern.matcher(line);
if (matcher.matches()) {
list.add(new String[] { matcher.group(1), matcher.group(2) });
}
countLine++;
}
'countLine'不需要,因为'list.size()'中已经有相同的信息,但是我喜欢你使用正则表达式的建议。 – 5gon12eder 2015-03-13 16:24:08
@ 5gon12eder'countLine'部分刚从原始问题复制而来。它的值和'list.size()'至少在我的代码中的区别在于后者只给你*匹配*行的数量。如果所有行匹配,则该值将与'countLine'相同。 – Thomas 2015-03-13 16:25:37
是的,这是正确的。是否需要该信息。 – 5gon12eder 2015-03-13 16:27:08
你应该做的第一件事是编写一个代表文件中某个条目的类。它可能相当复杂,但一个非常简单的设计也可能会做到。
class Record {
final String name;
final String option;
Record(final String name, final String option) {
this.name = name;
this.option = option;
}
}
使用这个类比处理字符串数组要好得多。
第二件事是使用比数组结构更抽象的数据结构来放入记录。这将使您免于提前知道元素数量的负担。我建议你为此使用ArrayList
。然后,您可以一次读入一条记录,并将其添加到您的收藏中。
List<Record> records = new ArrayList<Record>();
records.add(new Record("NameX", "OptionX"));
System.out.printf("There are %d records in the list.%n", records.size());
当然,上面例子中的第二行应该在读取文件行的循环中一遍又一遍地完成。
可以节省
的HashMap>
第一个字符串的数据(关键)是你的名字 第二个字符串(关键)是你的选择,他的价值(reault)为对象的结果。
你可以使用它作为:
结果= youHashMap.get(名)获得(OPT);
使用ArrayList而不是数组,因为大小未知。使用扫描仪读取文件,并检查下一行的存在,在文件中使用hasNextLine()方法,
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
class Test {
static Scanner userInput = new Scanner(System.in);
public static void main(String args[]) throws FileNotFoundException {
int countline = 0;
Scanner inp=new Scanner(new File("/home/nasir/Desktop/abc.txt"));
ArrayList<String> list=new ArrayList<String>();
while(inp.hasNextLine()){
list.add(inp.nextLine());// adding a row in ArrayList
countline++;// counting every line/row
}
System.out.println(countline+" "+list.get(2));
}// Main
}// Class
“对我来说,我可以接触到的元素像这样的东西一[X] [Y]是非常重要的我已经这样做了......“。你是否已经创建了你的二维数组或者你正在寻求什么帮助? “我这样做了”混淆了事情。您将不得不使用分隔符分隔“namex”和“optx”。 – DigitalNinja 2015-03-13 16:15:33
目前还不清楚你真正想问什么。 – 2015-03-13 16:16:45
我不知道如何把行的“名称”放在数组的位置a [x + 1] [y]上,并将“opt”放在位置a [x] [y + 1]。 – 2015-03-13 16:26:16