2013-03-08 6 views
-4

Я написал программу Java и попытаюсь получить int[] из строки, такой как 1,2,5,2,11.Регулярное выражение для проверки ввода пользователя

Но сначала мне нужно судить, правильно ли пользователь поставил правильный формат, например «,» + цифры. Как я могу написать это как регулярное выражение Java?

//set the default value of int[] a; 
     int[] a = {2,3,1,-2,2,7}; 
     //set the UI; 
     String text = JOptionPane.showInputDialog("please enter the array to be checked: "); 
     String[] strs = text.split(","); 
     System.out.println(strs); 
     System.out.println(strs.length); 
     int[] a2 = new int[strs.length]; 
     for(int i = 0; i < strs.length; i++){ 
      a2[i] = Integer.parseInt(strs[i]); 
     } 

Эй, ребята, жаль не разъясняя первый раз, я хочу, чтобы пользователь мог ввести формат как «» + любой положительный или отрицательный знак, и может быть терпимо пространство, так же, как «1, -2, 1,3, + 55 "

+0

Каков правильный формат в вашем случае? – VladL

+4

Можете ли вы показать нам, что вы пробовали до сих пор? – corsiKa

+1

Прежде всего, добро пожаловать в переполнение стека. На будущее, пожалуйста, посетите [ask] (снова?) И прочитайте часть о проведении исследований, прежде чем задавать вопрос. Нетрудно найти документацию о том, как писать регулярное выражение на Java. Было бы полезно показать, что вы уже сделали, и где, в частности, вы застряли. – slhck

ответ

3

Для подтверждения ввода вы можете использовать что-то вроде

if (text.matches("-?\\d+(,\\s?-?\\d+)*")){ 
    //try to split 
}else{ 
    //inform user about wrong data format 
} 
  • -? означает, что минус не является обязательным
  • \\d+ означает один или несколько цифр,
  • ,\\s?-?\\d+ означает "запятая", «белое пространство «один или один», «знак минус» (один или ни один), «цифра» (один или несколько),
  • (,\\s?-?\\d+)* означает, что эта структура может применяться ухо ноль или более раз.
+0

'' \\ d + (, \\ d +) * "' позволит '123,4,5,67890'. –

+1

@MattBall Да, поскольку OP использовал '1,2,5,2,11' Я предположил, что число равно одной или нескольким цифрам. С этим что-то не так? Я что-то упускаю? – Pshemo

+0

Я предположил, что запятые предназначены для разграничения отдельных чисел. –

5

Вам не нужно регулярное выражение для этого, только String#split(",") и Integer#parseInt().

Только одно из регулярных выражений для преобразования строк в числах не обязательно.

+0

. OP хотел сначала проверить правильность ввода пользователя, используя регулярное выражение. – slhck

+1

Возможно, вы правы, но 'Integer # parseInt()' является правильным выбором, а не регулярным выражением. –

+0

«У меня 99 проблем, поэтому я использовал regex ... теперь у меня 100 проблем». – corsiKa

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