2014-09-03 4 views
3

Проблемы таково:Читайте целые числа и строки из одной строки консоли

У меня есть две программы, которые принимают входные данные из консоли, но в другом порядке: 1)

Scanner input = new Scanner(System.in); 
    int temp1 = input.nextInt(); 
    input.nextLine(); 
    String str = input.nextLine(); 
    int temp2 = Integer.parseInt(str); 
    int total = temp1+temp2; 

    System.out.println(total); 

2)

Scanner input = new Scanner(System.in); 
    int temp1 = input.nextInt(); 
// input.nextLine(); 
    String str = input.nextLine(); 
    int temp2 = Integer.parseInt(str); 
    int total = temp1+temp2; 

    System.out.println(total); 

В 1-й случай 1 Отвезите входы в 2 различных линий, как

1 
2 

так что это дает правильный ответ, но во 2-ом случае я удалил input.nextLine() заявление принимать входные сигналы в одной строке, например:

1 2 

это дает мне исключение формата номера почему ?? а также предложить мне, как я могу читать целые числа и строки из одной строки консоли.

ответ

1

Проблема заключается в том, что str имеет значение " 2", и ведущее пространство не является законным синтаксисом parseInt(). Вам нужно либо пропустить пробел между двумя цифрами на входе, либо обрезать пробел str перед разбором как int. Для того, чтобы пропустить белое пространство, сделайте следующее:

input.skip("\\s*"); 
String str = input.nextLine(); 

Чтобы обрезать пространство прочь str перед разбором, сделайте следующее:

int temp2 = Integer.parseInt(str.trim()); 

Вы также можете получить фантазии и прочитать две части линии в одном go:

if (input.findInLine("(\\d+)\\s+(\\d+)") == null) { 
    // expected pattern was not found 
    System.out.println("Incorrect input!"); 
} else { 
    // expected pattern was found - retrieve and parse the pieces 
    MatchResult result = input.match(); 
    int temp1 = Integer.parseInt(result.group(1)); 
    int temp2 = Integer.parseInt(result.group(2)); 
    int total = temp1+temp2; 

    System.out.println(total); 
} 
+0

Да, это работает спасибо. – Spartan

1

В предположении, что входной сигнал является 1 2, после этой линии

String str = input.nextLine(); 

str равен " 2", поэтому он не может быть разобран как Int.

можно сделать просто:

int temp1 = input.nextInt(); 
int temp2 = input.nextInt(); 
int total = temp1+temp2; 
System.out.println(total); 
+0

Да, но каково решение этой проблемы? – Spartan

+0

@pushpendra Я предоставил код, который решает проблему. –

+0

Решение - input.skip ("\\ s *"); потому что в тех случаях, когда нам нужны реальные строки, такие как «abc», ваше решение недостаточно. – Spartan

0

в следующей строке нет целого ... его пытается создать и целое число от нуля ... следовательно, вы получите номер формиата исключения. Если вы используете раздвоение строки на temp1, то вы получите 2 строку со значениями 1 и 2.

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