我正在尝试从格式如下的文件中提取信息:
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
。
答案 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调用。