2016-01-22 3 views
-2

Как я могу проверить этот ввод строки в Java?Проверка ввода строки

Две буквы, за которыми следуют три цифры и буква. Последним письмом может быть только B для бизнес-счета или N для некоммерческого счета

Примером этого может быть «JB213B» или «JB231N».

EDIT: Правильно, теперь я использую регулярное выражение, спасибо.

Хотя теперь я задаю как на самом деле проводить проверку, вот то, что я до сих пор

  System.out.println("Enter your reference"); 
      String reference = keyboard.next(); 
      String regex = "[A-Z]{2}[0-9]{3}[B|N]"; 
      boolean match = reference.matches(regex); 
      while (!match) 
      { 
       System.out.println("That isn't a valid reference"); 
       reference = keyboard.next(); 
       match = reference.matches(regex); 
      } 
+0

Итерации через каждый символ строки и убедитесь, что это то, что должно быть? В качестве альтернативы, возможно, будет работать регулярное выражение. –

+0

Я надеялся, что будет более менее беспричинный способ, чем повторение каждого персонажа, но спасибо. –

+0

Есть ли причина, почему использование регулярного выражения не будет работать? –

ответ

2

Вы можете добиться этого с помощью регулярных выражений.

В этом случае выражение будет ^[A-Z]{2}[0-9]{3}[B|N]$

This является ссылкой для .matches() метода String класса.

Аналогичным образом, вы также можете использовать класс Pattern, чтобы найти соответствия. This является ссылкой для этого.

Использование:

String strToTest = "AB123B"; 
    String pattern = "^[A-Z]{2}[0-9]{3}[B|N]$"; 
    Pattern p = Pattern.compile(patern); 
    Matcher m = p.matcher(strToTest); 
    boolean b = m.matches(); 

Сравнение производительности:

Что лучше "Использование Regex" или "Использование сравнения строк"?

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

Если требуется много сопоставлений строк, которые могут быть пропущены с помощью регулярных выражений, тогда я бы пошел с регулярными выражениями.

Но следует также учитывать, что использование нескольких и/или сложных регулярных выражений будет влиять на производительность, поскольку оценка регулярного выражения также является утомительным и сложным процессом для компиляторов (по сравнению со строковыми операциями).

С другой стороны, использование сравнений String также подвержено ошибкам, поскольку мы непосредственно имеем дело с индексами и отбрасываем ненужные части.

2

Используйте регулярное выражение, подобное следующему.

String st = "JB213B"; 
String regex= "[A-Z]{2}\\d{3}[BN]"; 

boolean match = st.matches(regex); 
+0

Итак, будет ли эта работа проверять вход? 'System.out.println (« Введите ссылку »); Строка reference = keyboard.next(); Строка regex = "[A-Z] {2} [0-9] {3} [B | N]"; boolean match = reference.matches (regex); while (match = false) { System.out.println ("Это не действительная ссылка"); ссылка = keyboard.next(); match = reference.matches (regex); } ' –

+0

Да, это выглядит правильно, за исключением того, что это (match == false), а не (match = false), еще лучше, напишите _ (! Match) _ вместо этого. Я только что отредактировал сообщение, чтобы изменить это. – Berger

+0

Спасибо за ваш ответ, теперь я могу перестать разорвать мои волосы на что-то глупое, как это: ') –

3

Просто чтобы убедиться, что кто-то борется за не-регулярные выражения возможностей:

public boolean isValid(String s) { 
    return s.length() == 6 && 
     s.charAt(0) >= 'A' && s.charAt(0) <= 'Z' && 
     s.charAt(1) >= 'A' && s.charAt(1) <= 'Z' && 
     s.charAt(2) >= '0' && s.charAt(2) <= '9' && 
     s.charAt(3) >= '0' && s.charAt(3) <= '9' && 
     s.charAt(4) >= '0' && s.charAt(4) <= '9' && 
     (s.charAt(5) == 'B' || s.charAt(5) == 'N'); 
} 
3

Вы можете сравнить строку с регулярным выражением, используя метод() спичку.

// Match A-Z twice, 0-9 three times, and B or N once 
String myString = "JB213B"; 
String myPattern = "[A-Z]{2}[0-9]{3}[BN]{1}"; 
if(myString.matches(myPattern){ 
    // Do continuing logic 
} else { 
    // Do error logic 
} 
Смежные вопросы