2014-10-26 16 views
0

我有这些类型的值(一个例子)的文本文件:在Java中,如何读取由“字<space>号码<space>号码”组成的文本文件?

5 Dog 23 45 Cat 97 23 Mouse 13 23 Bird 10 23 Dog 99 18 

第一个数字“5”是我需要来标记阵列的对象的总数。我希望它这样,当我令牌化的文本文件,它忽略了“5”,然后读取它们为:

Dog 23 45 
Cat 97 23 
Mouse 13 23 
Bird 10 23 
Dog 99 18 

,然后把所有相同的对象一起在数组中。因此,例如狗的ArrayList将有:

Dog 23 45 
Dog 99 18 

我只是想知道我怎么能令牌化一个字,然后用空格两个数字。任何形式的帮助将不胜感激。

+0

想想模式。你有一个数字表明你有多少个条目。然后你有一个字符串,后面跟着两个整数值。我鼓励你开始考虑如何打破这个目标(至少在这个代码中我可以看到一个“while”循环)。 – Makoto 2014-10-26 23:37:42

回答

0

您可以使用java.io.BufferedReader逐行读取文件。

BufferedReader reader = new BufferedReader(new FileReader("/path/to/file.txt")); 
String line = null; 
while ((line = reader.readLine()) != null) { 
// ... 
} 

指南:基本I/O> I/O流>字符流

您可以用String#分裂()将拆分部分的字符串。

String[] parts = line.split("\\s"); 

教程:数字和字符串>字符串>在字符串

您可以使用循环增强遍历字符串的部分操作字符。

for (String part : parts) { 
    // ... 
} 

教程:语言基础>控制流语句> for语句

可以使用整数#的valueOf()将字符串转换为整数。

Integer i = Integer.valueOf(part); 

教程:接口> List接口

您可以使用列表#的add()将元素添加到列表中。

list.add(i); 

教程:试用:集合

0

随着模式:

@Test 
public void testPattern() { 
    String value = "5 Dog 23 45 Cat 97 23 Mouse 13 23 Bird 10 23 Dog 99 18"; 
    Matcher matcher = Pattern.compile("(\\D+)\\d+\\s++\\d+").matcher(value); 
    while (matcher.find()) { 
     System.out.println(matcher.group() + ": " + matcher.group(1)); 
    } 

} 

输出是:

Dog 23 45: Dog 
Cat 97 23: Cat 
Mouse 13 23: Mouse 
Bird 10 23: Bird 
Dog 99 18: Dog 
相关问题