Почему мой сканер parser.next обнаруживает скобки и номер вместо строки, которая стоит перед i, несмотря на наличие разделителя - PullRequest
1 голос
/ 06 апреля 2020

В сканируемом документе написано «введите (10); добавьте; (45.76)» в одну строку. Предполагается прочитать над скобками и точками с запятой и просто получить числа и строки, а также прочитать слово «ввод» перед запуском кода. Ему удается правильно прочитать ввод и первое число, но после этого при поиске «уравнения» вместо этого он берет 45,67) с круглыми скобками. Если я удаляю (45.67) и оставляю только add; , это работает и захватывает add. Я не уверен, что здесь происходит не так. Буду признателен за любую помощь, а также любые советы о том, как заставить эту программу сканировать следующую строку в файле, если есть еще одна.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.InputMismatchException;
import java.util.Scanner;

public class CPLParser {

	public double parseScript(String inputFile) throws CPLException{
		File file = new File(inputFile);
		try (Scanner Filereader = new Scanner(file)){
			String line = Filereader.nextLine();
			Scanner parser = new Scanner(line);
			parser.useDelimiter("\\(|\\)\\;");
			String enter = parser.next();
			double number = 0;
			String equation = " ";
			double numberTwo = 0;
			double total = 0;

			if (!enter.equals("enter")){
				throw new InvalidProgramStartException("");
			}

			while (parser.hasNext()) {
				if (parser.hasNextDouble()){
					number = parser.nextDouble();
				}
				if (parser.hasNext()){
					equation = parser.next();
				}
				if (parser.hasNextDouble()){
					numberTwo = parser.nextDouble();
				}
				if (equation == "add") {
					double thistotal = number + numberTwo;
					total += thistotal;
				}
			}
			System.out.println(equation);




		} catch (FileNotFoundException ex) {
			System.out.println("Could not find the file");
		} catch (InputMismatchException e) {

		}

		return 0;
	}

}

1 Ответ

0 голосов
/ 06 апреля 2020

В вашем примере кода есть несколько проблем:

Во-первых, в java вы не можете сравнивать строку с ==, вы должны использовать метод Equals для проверки равенства. Во-вторых, операция должна быть выполнена после прочтения всей строки, также сканер прочитал пустые символы, нам нужно это обработать

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

import java.net.MalformedURLException; 
import java.net.URL;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;
import java.io.*;
import java.util.Scanner;

public class Main
{
    public static void main(String[] args) {
        System.out.println("Hello World");
        try {
            Scanner parser = new Scanner("enter(10);add;(45.76)");
            parser.useDelimiter("\\(|\\)|\\;");
            String enter = parser.next();
                System.out.println("enter "+enter);
            double number = 0;
            String equation = " ";
            double numberTwo = 0;
            double total = 0;

            if (!enter.equals("enter")){
                // new InvalidProgramStartException("");
                System.out.println("InvalidProgramStartException");
            }

            while (parser.hasNext()) {
                if (parser.hasNextDouble()){
                    number = parser.nextDouble();
                        System.out.println("number "+ number);
                }
                if (parser.hasNext()){
                    String text= parser.next();
                    // only set equation if its not blank
                    if ("".equals(text))
                    { System.out.println("equation is Blank "+ equation +"...");}
                    else
                    {equation = text;
                    System.out.println("Setting equation "+ equation);}
                }
                if (parser.hasNextDouble()){
                    numberTwo = parser.nextDouble();
                    System.out.println("numberTwo "+ numberTwo);
                }

            }

            if (equation.equals("add")) {
                    double thistotal = number + numberTwo;
                    System.out.println("thistotal "+ thistotal);
                    System.out.println("total "+ total);
                    total += thistotal;
                    System.out.println("total "+ total);
                }
            System.out.println(equation);





        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Надеюсь, это поможет!

...