2013-02-28 4 views
1

Я пытаюсь извлечь информацию из файла, который отформатирован следующим образом:ArrayIndexOutOfBounds Когда Разбиение строки

1 
[email protected]|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(); 

В чем проблема?

EDIT: Я изменил «|» на "\ |" но проблема сохраняется.

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.

ответ

6

String#split(regex) ожидает регулярное выражение как параметр, а | - символ метасимвол (специальный символ) в мире регулярных выражений. Для лечения мета charcter как обычный символ, вы должны избавиться от нее с обратной косой черты (\ |)

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

или просто включить его в класс charcter

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

Ниже приведены мета-символы в регулярных выражениях :

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

+1 Для '[|]' :) –

+0

Спасибо за ваш ответ, но кажется, что я все еще получаю ошибку. :(Я ранее пытался использовать «,», чтобы отделить значения. – n0shadow

+2

@mCode, если я применяю split к '[email protected] | password | false', я получаю emailadd с индексом 0 password по индексу 1 и false на index 2. Вы уверены, что это источник вашего исключения. Можете ли вы обновить сообщение с помощью stacktrace, пожалуйста. – PermGenError

2

String.split(String regex) принимает регулярное выражение в качестве аргумента, используйте:

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

Спасибо за ваш ответ, но кажется, что я все еще получаю ошибку.:(Я ранее пытался использовать «,», чтобы отделить значения. – n0shadow

1

подобные сообщения. Tokenizing Error: java.util.regex.PatternSyntaxException, dangling metacharacter '*' Вы должны использовать так:

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

Спасибо за ваш ответ, но кажется, что я все еще получаю ошибку. :(Я ранее пытался использовать «,», чтобы отделить значения как Хорошо – n0shadow

0

На самом деле нет ничего плохого в том, как вы разбора строки. Ошибка лежит в другом месте. Я бы добавил System.out.println (повторяет) непосредственно перед входом в цикл, чтобы убедиться, что вы повторяете правильное количество раз. Чтобы отлаживать еще больше, я должен распечатать содержимое извлеченного файла (Arrays.toString (извлечено)) до строки, вызывающей user.addUsers. Если все это выглядит хорошо, тогда проблема заключается в вызове user.addUsers.

+0

Я бы посмотрел ближе к тому, что происходит в строке user.addUser. Вы не отправили код, так что я не могу вам помочь. Но если вы выберете эту строку и просто распечатаете извлечение [0 ] и извлечены [1], вы не получите ЛЮБЫХ ошибок. – CincinnatiKid

Смежные вопросы