在Java中,如何读取由&#34; word <space> number <space> number&#34;?</space> </space>组成的文本文件

时间:2014-10-26 23:35:38

标签: java file text bufferedreader stringtokenizer

我有一个包含这些类型值的文本文件(示例):

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

我只是想知道如何将一个单词标记为后跟两个带空格的数字。任何形式的帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

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

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

教程:基本I / O&gt; I / O流&gt;角色流

您可以使用String#split()将String拆分为部分。

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

教程:数字和字符串&gt;字符串&gt;操作字符串中的字符

您可以使用增强的for循环来迭代String部分。

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

教程:语言基础&gt;控制流程语句&gt; for Statement

您可以使用Integer#valueOf()将String转换为整数。

Integer i = Integer.valueOf(part);

教程:界面&gt;列表界面

您可以使用List#add()将元素添加到List。

list.add(i);

教程:试用:收藏

答案 1 :(得分: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