JAVA:空格分隔String中的所有非数字字符

时间:2012-03-09 05:01:52

标签: java string delimited-text

为所有非数字字符添加空格的特殊情况下修改字符串以空格分隔时遇到一些问题。

我的代码必须使用表示数学方程的字符串,然后将其拆分为单个部分。它使用值之间的空格分隔这样做如果字符串已经分隔,则此部分非常有用。 问题是我并不总是得到空格分隔的输入。为了解决这个问题,我想首先插入这些空格,以便正确创建数组。

我的代码必须做的是接受任何不是数字的字符,并在其前后添加空格。

这样的事情: 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)))---- *数字必须与parens分开

12.7 + 3.1变为1 2.7 + 3.1 ----- * 12.7被分割

51/3变成5 1/3 ----- *同样的问题

和5 * 4-2完全没有变化。

所以,我知道\ D可以用作java中所有非数字的正则表达式。然而,我试图实现这个(通过替换或将其与上面的\ B组合)导致编译器错误或者用空格替换char,而不是添加一个。

修改

====回答! ====

它不会让我添加我自己的答案,因为我是新手,但下面编辑neo108的代码(这本身不起作用)完成了这项工作。我所做的是更改它以检查isDigit,而不是isLetter,然后在这种情况下什么也不做(或者在小数的特殊情况下,为双打)。否则,角色将被更改为在任何一侧都有空格。

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

然而,任何有关如何更简洁地执行此操作的想法,以及对StringBuilders的合理解释,将不胜感激。即我在javadocs上读到的16个字符的限制是什么,如上例所示,你可以有更多的输出。

2 个答案:

答案 0 :(得分:0)

这样的事情应该有用......

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

答案 1 :(得分:-1)

  1. 在数学等式+ - * / ()
  2. 中定义操作
  3. 将公式字符串转换为char[]
  4. 一次遍历char[]一个字符,并将读取的字符附加到StringBuilder对象。
  5. 如果遇到与定义的操作匹配的任何字符,则在该字符前后添加一个空格,然后将其附加到StringBuilder对象。
    那么这是你可以实现的算法之一。可能还有其他方法可以做到这一点。