[英]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.