1

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

1
test@mail.ca|password|false

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

        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:堆栈跟踪

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

4 回答 4

6

String#split(regex)需要正则表达式作为参数,并且|是正则表达式世界中的元字符(特殊字符)。为了将元字符视为普通字符,您应该使用反斜杠 (\|) 对其进行转义

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

或者只是将它包含在字符类中

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

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

<([{\^-=$!|]})?*+.>
于 2013-02-28T23:40:17.100 回答
2

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

String[] extracted = info.split("\\|");
于 2013-02-28T23:40:59.477 回答
1

类似的帖子。标记化错误:java.util.regex.PatternSyntaxException,悬空元字符 '*'你必须像这样使用:

String[] extracted = info.split("\\|");
于 2013-02-28T23:42:31.350 回答
0

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

于 2013-03-01T00:33:45.797 回答