2014-11-12 2 views
0

У меня есть это задание для создания конвертера почтового штрих-кода. У меня есть рабочая программа с одним исключением. Проверка ошибок, которую я пытаюсь сделать, чтобы ограничить штрих-код преобразованием цифр только на: и | символов (так как требуется, чтобы программа конвертировала его обратно в цифры). Я не могу точно определить, как я могу, если вообще возможно, ограничить персонажей этими двумя в любом неспецифическом порядке. Я пробовал (! Input.hasNext ([:] [|])); и это не принесло мне никакой удачи в какой-либо вариации, о которой я думал. Любая помощь будет принята с благодарностью.Нужна помощь в завершении проверки моей ошибки

public static String number() 
{ 
    System.out.println("Enter a barcode with using : or | "); 
    Scanner input = new Scanner(System.in); 
    while (!input.hasNext()) 
    { 
     System.out.println("Error: Please Input a correct number"); 
     System.out.print("Entry: "); 
     input.next(); 
    } 
    String input1 = input.next(); 
    return input1; 
} 
+3

показать образец ввода в программу, которая показывает «хороший» случай и случай с ошибкой – hfontanez

+0

Для уточнения, хотите ли вы, чтобы программа игнорировала все после обнаружения «неправильного» символа и принимала то, что оно получало до эта точка (это означает, что моя строка ':: | :: || Q :: ||', и программа останавливается на 'Q', давая' :: | :: || '). Или вы просто хотите, чтобы он выходил из строя независимо от того, обнаружен ли неприемлемый символ. –

+0

'while (! Input.hasNext())' ... к счастью, вы не получите исключения, потому что вы используете 'System.in' в качестве источника. – Tom

ответ

0

Я считаю, что регулярное выражение, которое вы ищете, является [|:]*. Это означает «любое количество символов, которые являются одним из | или :».

Если на входе есть какой-либо символ, кроме пробела, который не является полосой или двоеточием, он будет отклонен. Пробелом или новой линией будет считаться конец токена.

Если вы хотите ограничить ввод точно 5 символами, вы должны использовать [|:]{5}. Если вы хотите, чтобы не менее 5 символов, но не более 10, выражение равно [|:]{5,10}, и если вы хотите не менее 5 символов, но вам все равно, сколько дольше этого времени, вы должны использовать [|:]{5,}.

+0

Спасибо, это, похоже, ограничило его созданием кода, который я ищу. Однако есть ли еще один вложенный цикл while, который я могу установить, чтобы дважды проверить длину штрих-кода, чтобы он не разбился, если пользователь вводит несколько штрих-кодов. Для задания требуется 5 –

+0

@JonathonP. Я отредактировал ответ, чтобы разместить длинные проверки. – RealSkeptic

+0

Удивительный! Я получил его полностью функциональным. Спасибо! Без этих лакомых кусочков, которые знают, где я буду с программой. Еще раз спасибо! Я бы проголосовал, но говорит, что мне нужна 15 репутации :(. –

0

Возможно, что вы хотите сделать что-то вроде этого:

Scanner input = new Scanner(System.in); 
System.out.println("Enter a barcode with using : or | "); 
String barcode = input.next(); // The barcode should not have white space, so don't use nextLine() 
while (!barcode.contains("|") && !barcode.contains(":")) 
{ 
    System.out.println("Error: Please Input a correct number"); 
    System.out.print("Entry: "); 
    input.next(); 
} 
// Do whatever with the barcode 

В принципе, вы хотите, чтобы предложить пользователю один раз для ввода штрих-кода. Вход должен быть проверен, чтобы увидеть, содержит ли он '|' или ':'. Если вход не содержит ни одного символа, вы хотите продолжить запрос пользователю ввести действительный ввод. После ввода правильного ввода код выйдет из цикла while() и продолжит нормальное выполнение.

+0

Я пробовал это и, кажется, застрял в цикле, независимо от того, что я набираю, я переформатировал его и все такое. Он просто продолжал цикл независимо от того, какая комбинация чисел букв и «: |» Я положил туда –