在向所有非数字字符添加空格的特殊情况下,我在将字符串修改为空格分隔时遇到了一些麻烦。
我的代码必须采用表示数学方程式的字符串,并将其拆分为各个部分。它使用值之间的空格分隔来做到这一点如果字符串已经被分隔,这部分效果很好。 问题是我并不总是得到一个空格分隔的输入。为了解决这个问题,我想先插入这些空格,以便正确创建数组。
我的代码必须做的是采用任何不是数字的字符,并在其前后添加一个空格。
是这样的: 3*24+321 变成 3*24+321 或者 ((3.0)*(2.5)) 变成 ( ( 3.0 ) * ( 2.5 ) )
显然我需要避免在数字中插入空格,否则 2.5 会变成 2 。 5,然后作为 3 个元素进入数组。事实并非如此。
到目前为止,我已经尝试使用
String InputLineDelmit = InputLine.replaceAll("\B", "");
它成功地将所有字母“abcd”的字符串更改为“a b c d” 但是当它遇到数字时它会出错。使用这种方法,我得到了:
(((1)*(2))) 变成 ( ( (1) * (2) ) ) ---- * 数字必须与括号分开
12.7+3.1 变成 1 2.7+3.1 ----- * 12.7 拆分
51/3 变成 5 1/3 ----- * 同样的问题
而 5*4-2 根本没有改变。
所以,我知道\D 可以用作 java 中所有非数字的正则表达式。但是,我尝试实现这个(通过替换它,或者将它与上面的\B 组合) 导致编译器错误,或者它用空格替换了字符,而不是添加一个。
编辑:
==== 已回复! ====
它不会让我添加自己的答案,因为我是新手,但对下面的 neo108 代码进行编辑(它本身不起作用)完成了这项工作。我所做的是将其更改为检查 isDigit,而不是 isLetter,然后在这种情况下什么也不做(或者在小数的特殊情况下,对于 double )。否则,字符将更改为两边都有空格。
public static void main(String[] args){
String formula = "12+((13.0)*(2.5)-17*2)+(100/3)-7";
StringBuilder builder = new StringBuilder();
for (int i = 0; i < formula.length(); i++){
char c = formula.charAt(i);
char cdot = '.';
if(Character.isDigit(c) || c == cdot) {
builder.append(c);
}
else {
builder.append(" "+c+" ");
}
}
System.out.println("OUTPUT:" + builder);
}
输出:12 + ( ( 13.0 ) * ( 2.5 ) - 17 * 2 ) + ( 100/3 ) - 7
但是,如果您有任何关于如何更简洁地执行此操作的想法,以及对 StringBuilder 的适当解释,我们将不胜感激。即我在 javadocs 上读到的 16 个字符的限制是什么,如上例所示,您可以有更多的输出。
最佳答案
像这样的东西应该有用...
String formula = "Ab((3.0)*(2.5))";
StringBuilder builder = new StringBuilder();
for (int i = 0; i < formula.length(); i++){
char c = formula.charAt(i);
if(Character.isLetter(c)) {
builder.append(" "+c+" ");
} else {
builder.append(c);
}
}
关于JAVA:空格分隔字符串中的所有非数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9629154/