我想在我的字符串的某些部分插入空格。 我正在写一个计算器计算器。插入字符串的某些部分
例如,对于字符串
"23+45"
我希望它是"23 + 45"
。
或"1+(4*8)"
as "1 + (4 * 8)"
。
我这样做,这样我可以根据空间分割字符串,
我使用的调度场算法,所以我需要tokenise输入。
我想在我的字符串的某些部分插入空格。 我正在写一个计算器计算器。插入字符串的某些部分
例如,对于字符串
"23+45"
我希望它是"23 + 45"
。
或"1+(4*8)"
as "1 + (4 * 8)"
。
我这样做,这样我可以根据空间分割字符串,
我使用的调度场算法,所以我需要tokenise输入。
很简单。
"23+45".replaceAll("[+*()]", " $0 ").trim();
trim()
修剪任何尾随空格。
您可以包括其他运营商像这样:
"23+(45*-30/2)".replaceAll("[+*()-/]", " $0 ").trim();
+1。你忘了'-'(减号)和'/'(除)。 – 2012-01-10 10:19:24
这可能会导致字符串中出现多个空格,可以使用另一个'replaceAll'来代替修剪来修剪其他空格:''23 + 45“.replaceAll(”[ -/+ *()]“,” $ 0“).replaceAll(”\\ s +“,”“);' – fivedigit 2012-01-10 10:21:51
@HarryJoy更新了我的答案,谢谢。但我认为''不应该被空格隔开,如果用作符号的话。用它作为操作符,空间很好。哪个更好看? '2 * -4'或'2 * - 4'? – adarshr 2012-01-10 10:22:49
的想法添加,因为分裂字符串目的,比你还可以通过拆分算术运算符也用Class StringTokenizer
字符串的空间。 更多关于StringTokenizer
在现代Java中我没有看到使用'StringTokenizer'的任何一点。 – adarshr 2012-01-10 10:29:56
这是一个你可以尝试的例子: String msg =“1+(4 * 8)”; StringTokenizer st = new StringTokenizer(msg,“+ */- ”); (st.hasMoreTokens()){System.out.println(st。的nextToken()); – 2012-01-10 10:37:08
这就是我想说的。你必须写4行,它仍然不给我最后的字符串。要做到这一点,你必须添加另外3行来使用'StringBuilder'。 – adarshr 2012-01-10 10:44:31
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();
}
}
}
你的问题是....和你的代码,这尝试这看起来像....但它确实....而不是你所期望的是.... ??? – 2012-01-10 10:13:58
现在我在输入本身中插入空格。所以我还没有真正的代码。我已经编写了程序的其余部分,但那不是真的与此有关。 – saviok 2012-01-10 10:16:38