我正在尝试创建一个计算器,它可以采用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个数字怎么办?有办法以某种方式递归地执行此操作吗?这个程序应该使用我读过的正则表达式,但我不确定如何实现。
任何帮助都会非常感激。提前致谢
答案 0 :(得分:3)
使用Scanner创建的并使用以下方法:hasNext
,next
(用于阅读“TO”,“SUBTRACT”等),{ {1}}和hasNextInt
(用于阅读NUM)。一旦将nextInt
提供给扫描仪,就不应该做任何事情。请务必在input
之前尝试hasNextInt
,因为如果下一个字匹配整数,hasNext
将返回true:)
以下是一些有助于构建解析器的注释:
“添加”NUM1 NUMN +“TOGETHER”;如果第一个NUM1后跟另一个NUMN,那么这个格式。继续读取NUMN,直到没有更多 - 可以放入ArrayList供以后使用或计算并立即发出输出。那么最后应该有一个“TOGETHER”。
“ADD”NUM1“TO”NUM2;仅当NUM1后跟“TO”时才会显示。
“SUBTRACT”NUM1“FROM”NUM2
“再见”
可能会这样开始:
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