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

标签 java string csv

向所有非数字字符添加空格的特殊情况下,我在将字符串修改为空格分隔时遇到了一些麻烦。

我的代码必须采用表示数学方程式的字符串,并将其拆分为各个部分。它使用值之间的空格分隔来做到这一点如果字符串已经被分隔,这部分效果很好。 问题是我并不总是得到一个空格分隔的输入。为了解决这个问题,我想先插入这些空格,以便正确创建数组。

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

是这样的: 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/

相关文章:

java - Java 如何使用 "+"进行字符串连接?

Java CSVReader 忽略双引号中的逗号

java - 将更改传播到嵌套对象的模式

java - 使用windows域认证进行认证

java - 合并两个ArrayList

Java 日期格式转 JavaScript 日期格式

r - 拆分字符串并检查所有元素在 R 中是否唯一

python - 添加反斜杠而不转义

postgresql - 如何使用 ANSI 编码的 postgresql 复制命令?

apache - 按列的值拆分 csv 文件 - Apache Nifi