如何解析这个输入?

时间:2011-07-21 21:01:28

标签: java

我正在尝试创建一个计算器,它可以采用4种不同格式的字符串:

input: add 1 2 13 5 together
       => 1 + 2 + 13 + 5 = 21
input: add 9 to 10
       => 9 + 10 = 19
input: subtract 5 from 13
       => 13 - 5 = 8
input: bye
       => end program

我已经设置了这样的代码:

import java.util.*;

    class Calculator {
      public static void main(String[] args) {
        System.out.println("yes>" )
        Scanner zip = new Scanner(System.in);
        String input = zip.nextLine(); 

        if (input.equals("bye")) 
           System.exit(0); 
        else if (input.substring(0, 1) == "a") //assume first cmd is add
           (integer.ParseInt(input.subtring(3, BLANK) //extract first number

我的问题是我不知道字符串中数字的索引。我想这样做:

if(input.substring(0,3)==“add”)=>下一个数字将是一个数字。解析integer.substring(3,BLANK)。 BLANK应该是空格字符的索引。然后需要将该数字放入变量中,程序需要检查所有其他整数。

我对如何解决这个问题感到有些困惑。如果需要添加(或减去?)有500个数字怎么办?有办法以某种方式递归地执行此操作吗?这个程序应该使用我读过的正则表达式,但我不确定如何实现。

任何帮助都会非常感激。提前致谢

2 个答案:

答案 0 :(得分:3)

使用Scanner创建的并使用以下方法:hasNextnext(用于阅读“TO”,“SUBTRACT”等),{ {1}}和hasNextInt(用于阅读NUM)。一旦将nextInt提供给扫描仪,就不应该做任何事情。请务必在input之前尝试hasNextInt,因为如果下一个字匹配整数,hasNext将返回true:)

以下是一些有助于构建解析器的注释:

  1. “添加”NUM1 NUMN +“TOGETHER”;如果第一个NUM1后跟另一个NUMN,那么这个格式。继续读取NUMN,直到没有更多 - 可以放入ArrayList供以后使用或计算并立即发出输出。那么最后应该有一个“TOGETHER”。

  2. “ADD”NUM1“TO”NUM2;仅当NUM1后跟“TO”时才会显示。

  3. “SUBTRACT”NUM1“FROM”NUM2

  4. “再见”

  5. 可能会这样开始:

    hasNext

    快乐的家庭工作。

答案 1 :(得分:1)

您可以使用split()将行拆分为单独的令牌,然后检查第一行是否为命令,并验证其他是否为数字。

简短的例子:

String[] tokens = input.split(" ");
if (tokens.length > 0) { // there are tokens
    if (tokens[0].equals("add")) { // valid command - add
        // parse tokens and make sure they are numbers