2016-02-22 3 views
-1

Сейчас я работаю над принятием уравнения в нотации «infix» и удалением любых пробелов внутри этой строки до выполнения остальной части моей программы. Прямо сейчас, без каких-либо пробелов в строке, я получаю правильное уравнение «Postfix» взамен. Но по какой-то причине я не могу удалить пробелы строки, которая была введена с использованием new Scanner(System.in);, прежде чем выполнять мои методы «Postfix». Вот основной метод моего файла:Удаление пространств из сканера (System.in) Вход

public static void main(String[] args){ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.print("Enter the equation you'd like to evaluate: "); 
    InfixToPostFix postFixString = new InfixToPostFix(); 
    String infix = keyboard.next(); 
    String newInfix = infix; 
    //String newInfix = "9 * 5.3"; 
    //String deleteSpaceInInfix = newInfix.replace(" ", ""); 
    //System.out.println("deleteSpaceInInfix: " + deleteSpaceInInfix); 

    System.out.println("Postfix representation: " + postFixString.InfixToPostfix(infix)); 
} 

Теперь я отметил три строки, которые я пытался проверить отметив из линий, используя информацию сканера. При этом результат строк прокомментировал: 9*5.3 как и ожидалось. Поэтому я считаю, что это что-то с объектом String Scanner.

Способ, которым вы видите этот метод сейчас, когда введено 9 * 5.3, производит только 9. Все после первого места отбрасывается.

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

Я был бы признателен за любую информацию, помогающую мне лучше понять, почему мой объект Scanner (String infix = keyboard.next(); в данном случае) обрабатывается иначе, чем обычный объект String newInfix = "9 * 5.3;?

+1

Вы пытаетесь использовать nextLine() вместо next()? Если разделитель не предоставляется, сканер будет использовать любой символ пробела в качестве разделителя. Вот почему он возвращает только 9. – VirtualTroll

+0

как указано выше, [next()] (http://www.tutorialspoint.com/java/util/scanner_next.htm) получает только первое слово, пробел является разделителем. – Phiter

+0

Если бы я мог дать вам все очки за помощь. – Pwrcdr87

ответ

1

По умолчанию разделитель Scanner является пробелом. Используйте nextLine(), если вы хотите, чтобы прочитать всю строку:

Scanner keyboard = new Scanner(System.in); 
String infix = keyboard.nextLine(); 
infix = infix.replace(" ", ""); 
System.out.println(infix); 

Примечание: Там также hasNextLine(), чтобы проверить, есть ли другая линия на входе.

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