Java中的字符串标记化

时间:2017-09-21 17:09:52

标签: java string

我有以下代码

    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 + BAlpha + Beta等公式。 我想让tokenizer分隔字符串 Alpha + Beta

但我得到的输出只是第一个元素 Alpha

4 个答案:

答案 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 + Betaaoperator返回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());
    }