我有以下代码
System.out.println("Enter equation you want to calculate:");
System.out.println("Equation can not have more than two variables");
equation = input.next();
StringTokenizer var = new StringTokenizer(equation,"");
while (var.hasMoreElements())
{
System.out.println(var.nextToken());
}
用户可以输入A + B
或Alpha + Beta
等公式。
我想让tokenizer分隔字符串
Alpha
+
Beta
但我得到的输出只是第一个元素
Alpha
。
答案 0 :(得分:2)
equation = input.next();
只会读取下一个(空格分隔的)单词,而不是整个等式。
您的问题不在于令牌系统,而是您错误地收集输入。
尝试改为:
equation = input.nextLine();
答案 1 :(得分:1)
If your input is "Alpha + Beta" , then the below code results in
Alpha
+
Beta
StringTokenizer var = new StringTokenizer("Alpha + Beta"," ");
while (var.hasMoreElements())
{
System.out.println(var.nextToken());
}
答案 2 :(得分:1)
格式A'运营商' B其中'运营商'可以表示来自+-*/
的任何内容,我建议您使用正则表达式进行拆分。在Regex101进行演示。
(\w+)([\+\-\*\/])(\w+)
我建议你先替换所有的空间,以摆脱不必要的混乱。也不要忘记用双\\
;
输入为:String input = "Alpha + Beta";
Pattern pattern = Pattern.compile("(\\w+)(\\+)(\\w+)");
Matcher matcher = pattern.matcher(input.replace(" ",""));
String a = null;
String b = null;
String operator = null;
while (matcher.find()) {
a = matcher.group(1);
operator = matcher.group(2);
b = matcher.group(3);
}
将从变量Alpha + Beta
,a
和operator
返回b
。
答案 3 :(得分:0)
试试此代码
System.out.println("Enter equation you want to calculate:");
System.out.println("Equation can not have more than two variables");
Scanner input = new Scanner(System.in);
String equation = input.nextLine();
StringTokenizer var = new StringTokenizer(equation, " ");
while (var.hasMoreElements()) {
System.out.println(var.nextToken());
}