Переданный в метод объект не имеет значения? - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь передать объект Scanner методу create () , но внутри метода объект Scanner не имеет никакого значения.Вот код, если у кого-то есть советы:

import java.lang.*;
import java.io.*;
import java.util.*;

public final class Instructions
{
    /**
     * Make constructor private so that there cannot be 
     * any instances of the class.
     */
    private Instructions(){}


    public static void operate(String instruction)
    {
        //Get instruction
        Scanner scanString = new Scanner(instruction);
        scanString.useDelimiter(" |;");
        String next;

        //Scan and operate
        if(scanString.hasNext())
        {
            next = scanString.next();

            if(next.equals("CREATE"))
            {
                create(scanString);
            }
            else if(next.equals(".EXIT"))
            {
                System.exit(0);
            }   
        }

        scanString.close();
    }

    private static void create(Scanner scanString)
    {
        //Program reaches here with what should be "DATABASE db_1"
        //left in scanString

        String next;

        if(scanString.hasNext())
        {
            System.out.println("HERE"); //Never reaches this

            next = scanString.next();

            if(next.equals("DATABASE"))
            {
                createDatabase(scanString);
            }
            else if(next.equals("TABLE"))
            {
                createTable(scanString);
            }
            else
            {
                System.out.println("Instruction " + next + " not recognized. Skipping instruction." );
            }
        }
    }

    private static void createDatabase(Scanner scanString)
    {
        File database;

        if(scanString.hasNext())
        {
            database = new File(scanString.next());

            if(!database.exists())
            {
                //Make a database file
                try
                {
                    database.createNewFile();
                }
                catch(IOException e)
                {
                    e.printStackTrace();
                }
            }
            else
            {
                System.out.println("!Failed to create database " + database.toString() + 
                    "because it already exists.");
            }
        }
    }

    private static void createTable(Scanner scanString)
    {

    }
}

Входной файл, из которого я читаю, имеет вид:

CREATE DATABASE db_1;

Я пытаюсь выяснить, почему это когда явызовите scanString.hasNext () в методе create (), метод scanString.hasNext () не возвращает true, если после первого разделителя осталось еще два токена?

1 Ответ

0 голосов
/ 05 февраля 2019
Scanner scanString = new Scanner(instruction);

Это создает Scanner, который использует заданный String в качестве ввода.

next = new String(scanString.next());

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

Примечание: вы никогда не должны использовать new String().Здесь вы можете просто сделать next = scanString.next().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...