繁体   English   中英

插入字符串的某些部分

[英]inserting in certain parts of the string

我想在字符串的某些部分插入空格。 我正在写一个计算器程序。

例如,对于字符串

"23+45"我希望它是"23 + 45"

或将"1+(4*8)"作为"1 + ( 4 * 8 )"

我这样做是为了可以根据空格分割字符串,

我正在使用Shunting Yard算法,因此需要标记输入。

非常简单。

"23+45".replaceAll("[+*()]", " $0 ").trim();

trim()修剪所有尾随空格。

您可以这样包含其他运算符:

"23+(45*-30/2)".replaceAll("[+*()-/]", " $0 ").trim();

由于分割String的目的而添加空格的想法,也可以使用Class StringTokenizer通过算术运算符来分割字符串。 有关StringTokenizer的更多信息

SavK,

插入令牌,然后再次解析它们似乎是多余的无用操作。 (相反,上面的正则表达式解决方案又短又好(对我来说是+1))或者,您可以直接向Shunting Yard算法提供令牌(需要令牌作为输入)。

尝试查看StreamTokenizer类(自JDK 1.0起)以解析令牌的表达式。 它完成所有您需要返回令牌的解析(甚至更多:获取数字作为整数令牌)。

这是原始演示。

package core;

import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader;

public class Q {
public static void main(String[] args) {
    StreamTokenizer stok = new StreamTokenizer(new StringReader("1+(40*8)"));
    stok.parseNumbers();
    try {
        while(stok.nextToken() != StreamTokenizer.TT_EOF) {
            System.out.println("nval: "+stok.nval);
            System.out.println("sval: "+stok.sval);
            System.out.println("ttype: "+stok.ttype);
            System.out.println("toString: "+stok.toString());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM