StringTokeniser 不读取数据

StringTokeniser not reading data

我必须从文件中读取数据,并且我刚刚在 StringTokenizer 中输入了一些示例数据作为字符串。我不明白我的代码有什么问题。有人可以请教吗?

import java.util.StringTokenizer;

public class rough {

    public static void main(String[] args) throws Exception {
        StringTokenizer itr = new StringTokenizer("PKE2324 02-12-2020 200"
      + "\nMJD432 19-05-2019 150");

        while (itr.hasMoreTokens()){
            String line = itr.nextToken().toString();
            String[] tokens = line.split(" ");
            String[] date = tokens[1].split("-");
            String yr = date[2];
            String reg = tokens[0];
            String regy = new String(reg + " " + yr);
            System.out.println(regy);   
            }
     }

}

我想获取字符串形式的注册号和年份。当我 运行 这个时,我不断得到 ArrayIndexOutofBounds

这是由于逻辑错误和分隔符不当引起的运行时错误类型。

假设您想使用换行符对大字符串进行标记,请使用 \n 作为 StringTokenizer 的分隔符。

查看下面满足您的用例的更正代码:

import java.util.StringTokenizer;

public class rough {

    public static void main(String[] args) throws Exception {
        StringTokenizer itr = new StringTokenizer("PKE2324 02-12-2020 200"
    + "\nMJD432 19-05-2019 150", "\n");

        while (itr.hasMoreTokens()){
            String line = itr.nextToken().toString();
            String[] tokens = line.split(" ");
            String[] date = tokens[1].split("-");
            String yr = date[2];
            String reg = tokens[0];
            String regy = new String(reg + " " + yr);
            System.out.println(regy);   
            }
    }
}

输出:

PKE2324 2020
MJD432 2019

此行引起的异常

String[] tokens = line.split(" ");
String[] date = tokens[1].split("-");

line = PKE2324,所以 tokens[] = { "PKE2324" } --> length = 1 令牌[1] --> ArrayIndexOutOfBoundException

解决这个问题:

StringTokenizer itr = new StringTokenizer("PKE2324 02-12-2020 200"
      + "\nMJD432 19-05-2019 150");

默认分隔符是空格。 如果你想要不同的分隔符,你应该在构造函数中传递分隔符。