0

假设我有一个我想从中读取的textfile.txt 。这是文件中的文本:

23:years:old
15:years:young

使用该useDelimiter方法,我如何告诉我的程序:和换行符是分隔符?将文本放在一行中并使用useDelimter(":");作品。问题是当我得到几行文本时。

Scanner input = new Scanner(new File("textfile.txt));
input.useDelimiter(:);

while(data.hasNextLine()) {
 int age = input.nextInt();
 String something = input.next();
 String somethingelse = input.next();
}

使用此代码,我将收到 inputMisMatch 错误。

4

6 回答 6

2

尝试

scanner.useDelimiter("[:]+");

完整的代码是

Scanner scanner = new Scanner(new File("C:/temp/text.txt"));
scanner.useDelimiter("[:]+");
while (scanner.hasNext()) {
    System.out.println(scanner.next());
}

输出是

23
years
old
15
years
young
于 2012-10-19T04:11:06.893 回答
1

使用此代码

            Scanner input;
        String tokenizer[]; 
        try {
            input = new Scanner(new File("D:\\textfile.txt"));
            input.useDelimiter("\\n");
                while(input.hasNextLine()) {
                    tokenizer = input.next().split(":"); 
                     System.out.println(tokenizer[0]+"   |"+tokenizer[1]+" | "+tokenizer[2]);

                    }


        }catch(Exception e){}

它会给你像这样的输出

23 |years | old

15 |years | young
于 2012-10-19T04:22:44.653 回答
0

如果您只想一次将所有内容全部拆分,那么我想您可以使用

useDelimiter(":\\n")

这应该在 : 和 newspace 上分开,但它不是处理数据的最有效方式,特别是如果每​​一行文本都以相同的格式设置并代表一个完整的条目。如果是这种情况,那么我的建议是只在新行上拆分,就像这样;

s.useDelimiter("\\n");
while(s.hasNext()){
    String[] result = s.next.split(":");
    //do whatever you need to with the data and store it somewhere
}

这将允许您逐行处理数据,并将其拆分到所需的位置。但是,如果您确实打算逐行查看,我建议您查看 BufferedReader,因为它有一个 readLine() 函数,可以让事情变得更容易。

于 2012-10-19T04:02:05.633 回答
0

您可能想要创建一个包含“:”和换行符的分隔符模式我没有测试它,但是 [\s|:]+ 是一个匹配一个或多个空白字符的正则表达式,还有“:”。试放:

input.useDelimiter("[\\s|:]+");
于 2012-10-19T04:02:07.647 回答
0

只要所有行都具有所有三个字段,您就可以使用input.useDelimiter(":\n");

于 2012-10-19T04:04:19.953 回答
0

你有两种方法可以做到这一点:

  1. 连接字符串使其成为一行。
  2. 首先分隔“换行符”,然后分隔“:”每个返回字符串标记。
于 2012-10-19T03:51:11.920 回答