插入字符串的某些部分

时间:2012-01-10 10:11:18

标签: java string calculator

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

例如,对于字符串

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

"1+(4*8)""1 + ( 4 * 8 )"

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

我使用了Shunting Yard算法,所以我需要标记输入。

3 个答案:

答案 0 :(得分:6)

非常简单。

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

trim()修剪任何尾随空格。

您可以包含其他运算符:

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

答案 1 :(得分:0)

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

的更多信息

答案 2 :(得分:0)

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();
    }
}
}