我试图通过一个扫描仪对象的方法创建(),但在方法内部扫描仪的对象不具有任何价值。下面是如果有人有任何提示的代码:
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;
我试图找出为什么,当我打电话的create()方法scanString.hasNext(),scanString.hasNext()时,有两个第一分隔符后留下的记号是不是返回true?
Scanner scanString = new Scanner(instruction);
这将创建一个使用给定Scanner
作为输入String
。
next = new String(scanString.next());
这读取基于扫描器的分隔符,默认为空格输入。如果输入的字符串包含没有空格,则此调用将返回整个输入字符串。
注意:你不应该使用new String()
。在这里你可以做next = scanString.next()
。