我想在字符串的某些部分插入空格。 我正在编写计算器程序。
例如,对于字符串
"23+45"
我希望它为"23 + 45"
。
或"1+(4*8)"
为"1 + ( 4 * 8 )"
。
我这样做,以便我可以根据空格分割字符串,
我使用了Shunting Yard算法,所以我需要标记输入。
答案 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();
}
}
}