ArrayIndexOutOfBounds拆分字符串时

时间:2013-02-28 23:39:15

标签: java arrays bufferedreader indexoutofboundsexception

我正在尝试从格式如下的文件中提取信息:

1
test@mail.ca|password|false

但是,在运行以下代码时,我似乎遇到ArrayIndexOutOfBounds错误,而我无法确定原因,因为我认为我的拆分应该正常运行。在以“users”开头的行上获得错误。

        sc = new Scanner (System.in);
        BufferedReader in = new BufferedReader (new FileReader (USAVE));
        int repeats = Integer.parseInt(in.readLine());
        for (int c = 0; c < repeats; c++){
            String info = in.readLine();
            System.out.println (info);
            String[] extracted = info.split("\\|");
            users.addUser(extracted[0], decryptPassword(extracted[1]));
        }
        in.close();

可能是什么问题?

编辑:我改变了“|”到“\ |”但问题仍然存在。

EDIT2:StackTrace

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at OnlineCommunications.userFromFile(OnlineCommunications.java:165)
at OnlineCommunications.logIn(OnlineCommunications.java:36)
at OnlineCommunications.emailOption(OnlineCommunications.java:593)
at OnlineCommunications.main(OnlineCommunications.java:683)

我上面发布的方法名为userFromFile

4 个答案:

答案 0 :(得分:6)

String#split(regex)期望正则表达式作为参数,|是正则表达式世界中的元字符(特殊字符)。为了将元字符视为普通字符,您应该使用反斜杠(\ |)

对其进行转义
String[] extracted = info.split("\\|");

或者只是将它包含在charcter类中

String[] extracted = info.split("[|]");

以下是正则表达式中的元字符:

<([{\^-=$!|]})?*+.>

答案 1 :(得分:2)

String.split(String regex)将正则表达式作为参数,使用:

String[] extracted = info.split("\\|");

答案 2 :(得分:1)

类似的帖子。 Tokenizing Error: java.util.regex.PatternSyntaxException, dangling metacharacter '*'你必须这样使用:

String[] extracted = info.split("\\|");

答案 3 :(得分:0)

实际上,如何解析字符串并没有错。错误在于其他地方。我会在你进入循环之前添加System.out.println(重复)以确保你正在迭代正确的次数。为了进一步调试,我会在调用user.addUsers的行之前打印提取的内容(Arrays.toString(提取))。如果一切看起来都不错,那么问题在于user.addUsers调用。