在Java中读取令牌

时间:2012-12-04 00:52:13

标签: java split token

在做一个学校项目的时候,我遇到了以下问题:从processCommand()方法(使用控制台作为一种文本编辑器)向run()方法输入一行后,我发现无论出于什么原因,令牌都没有正确读取,所以即使命令应该简单准确(即在控制台中键入h),我仍然会运行processCommand()方法的'else'子句。请输入有效的命令。“)。我确定我如何分裂线路有什么问题,但对于我的生活我无法理解。任何人都可以帮助我吗?

    @Override
public void run() {
    Scanner scanner = new Scanner(System.in);
    String line;

    try {
        do {
            System.out.print("vi: ");
            line = scanner.nextLine();
            if(line.length() > 0){
                processCommand(line);
            }
        } while (!quit);
    } catch (Exception ex) {
        System.out.println("An error occurred.");
    }

    scanner.close();
    System.out.println("Goodbye!");
}

@Override
public void processCommand(String line) {
    String[] tokens = line.split(" ");
    if(tokens[0] == "b") {
        insertBefore(line.substring(3));
    }
    if(tokens[0] == "i") {
        insertAfter(line.substring(3));
    }
    if(tokens[0] == "m") {
        moveUp(Integer.parseInt(line.substring(3)));
    }
    if(tokens[0] == "u") {
        moveDown(Integer.parseInt(line.substring(3)));
    }
    if(tokens[0] == "r") {
        remove(Integer.parseInt(line.substring(3)));
    }
    if(tokens[0] == "d") {
        remove(Integer.parseInt(line.substring(3)));
    }
    if(tokens[0] == "c") {
        clear();
    }
    if(tokens[0] == "s") {
        try {
            save(line.substring(3));
        } catch (IOException e) {
        }
    }
    if(tokens[0] == "l") {
        try{
            load(line.substring(3));
        } catch (IOException e) {

        }
    }
    if(tokens[0] == "h") {
        displayHelp();
    }
    if(tokens[0] == "x") {
        exit();
    }
    else {
        System.out.println("Please enter a valid command.");
        return;
    }
}

2 个答案:

答案 0 :(得分:3)

您不应该使用“==”进行字符串比较。使用以下内容:

if(tokens[0].equals("h"))...

希望有所帮助!

答案 1 :(得分:0)

仅供参考,这是使用switch语句的替代版本(可能更容易阅读或更少字符输入):

public void processCommand(String line) {
    String[] tokens = line.split(" ");
    if(tokens[0].length() == 0) {
        System.out.println("Please enter a valid command.");
        return;
    }
    switch(tokens[0].charAt(0)) {
        case 'b':  insertBefore(line.substring(3));
                   break;
        case 'i':  insertAfter(line.substring(3));
                   break;
        case 'm':  moveUp(Integer.parseInt(line.substring(3)));
                   break;
        case 'u':  moveDown(Integer.parseInt(line.substring(3)));
                   break;
        case 'r':
        case 'd':  remove(Integer.parseInt(line.substring(3)));
                   break;
        case 'c':  clear();
                   break;
        case 's':  try {
                       save(line.substring(3));
                   } catch (IOException e) { }
                   break;
        case 'l':  try {
                       load(line.substring(3));
                   } catch (IOException e) { }
                   break;
        case 'h':  displayHelp();
                   break;
        case 'x':  exit();
                   break;
        default:   System.out.println("Please enter a valid command.");
    }
}