-1

我有一个包含内容的文本文件:

26/09/2013,16:04:40 2412 -928.0
25/09/2013,14:24:30 2412 914.0

上面的文件每行包含一个日期、时间、整数和双精度

一旦读入数据,我已经创建了一个包含数据的类:

public class Entry{

    public String date, time;
    public int integerNumber;
    public double doubleNumber;

    public Entry(String d, String t, int n1, double n2){
        this.date=d;
        this.time=t;
        this.integerNumber=n1;
        this.doubleNumber=n2;
    }
}

将上述文件读入 Entry[] 数组的最佳方法是什么,其中数组中的每个元素都是每一行的数据?

编辑:我目前的尝试涉及将每一行作为字符串读取并为各种数据创建子字符串,例如String date=line.substring(0,10);现在这工作正常,但是当我得到整数时,它不一定是 4 位数字。这让我陷入困境,因为我不知道如何读取任意大小的数字。

4

4 回答 4

3

您可以使用正则表达式来读取文本文件。

例如,

String line = "001 John Smith";  
String regex = "(\\d)+ (\\w)+ (\\w)+";  
Pattern pattern = Pattern.compile(regex);  
Matcher matcher = pattern.matcher(line);  
while(matcher.find()){  

    String [] group = matcher.group().split("\\s");  
    System.out.println("First Name "+group[1]);  
    System.out.println("Last Name " +group[2]);  

}  
于 2013-09-26T20:15:18.813 回答
2

好吧,如果您可以保证您正在阅读的文件中的所有行都具有以下格式

<date>,<time> <integer> <double>

你可以这样读

String foo = "25/09/2013,14:24:30 2412 914.0";
String delims = "[, ]+";
String[] tokens = foo.split(delims);

String d = tokens[0]; // d would contain the string '25/09/2013'
String t = tokens[1]; // t would contain the string '14:24:30'
int n1 = Integer.parseInt(tokens[2]); // n1 would contain the integer 2412
double n2 = Double.parseDouble(tokens[3]); // n2 would contain the double 914.0
于 2013-09-26T20:08:26.617 回答
0

您可以为此使用扫描仪。
它具有构造函数,该构造函数接受File并且还具有分别读取的next(), nextInt(),nextDouble()方法String,int,double

示例代码参考链接:http ://www.cs.utexas.edu/users/ndale/Scanner.html

于 2013-09-26T20:11:03.607 回答
0

可以通过使用使用Apache Commons FileUtils来完成

File file = new File("/yourfile.txt");
List<String> lines = FileUtils.readLines(file, null);
List<Entry> entries = new ArrayList<Entry>();
for (String line : lines) {
  //line == 26/09/2013,16:04:40 2412 -928.0
  Entry entry = createEntry(line); // parse string and create a Entry...

  entries.add(entry);
}

// Warning, not safe and not pretty...
private static Entry createEntry(String line) {
   String[] parts = line.split(" ");        
   String[] datePart = parts[0].split(",");

   return new Entry(datePart[0], 
             datePart[1], 
             Integer.valueOf(parts[1]),
             Double.valueOf(parts[2])
   );
}
于 2013-09-26T20:18:19.163 回答