java String.replace两个数字之间的char

时间:2017-08-06 19:47:46

标签: java replace insert char between

我想替换两个数字之间的所有字符' - ',或者数字和'。'之间的字符。由char'&'。例如

String input =“2.1(-7-11.3)-12.1 * -2.3-.11”
字符串输出=“2.1(-7& 11.3)-12.1 * -2.3& .11”

我有类似的东西,但我试着更容易。

public void preperString(String input) {

    input=input.replaceAll(" ","");
    input=input.replaceAll(",",".");                
    input=input.replaceAll("-","&");             
    input=input.replaceAll("\\(&","\\(-");         
    input=input.replaceAll("\\[&","\\[-");         
    input=input.replaceAll("\\+&","\\+-");
    input=input.replaceAll("\\*&","\\*-");
    input=input.replaceAll("/&","/-");
    input=input.replaceAll("\\^&","\\^-");
    input=input.replaceAll("&&","&-");
    input=input.replaceFirst("^&","-");

    for (String s :input.split("[^.\\-\\d]")) {
        if (!s.equals(""))
        numbers.add(Double.parseDouble(s));
    }

3 个答案:

答案 0 :(得分:2)

你可以使用正则表达式组一次性解决问题,你可以使用它:

2.1(-7&11.3)-12.1*-2.3&.11

<强>输出

  ([\\d.])-([\\d.])
//        ^------------replace the hyphen(-) that it between
// ^__________^--------two number(\d)
//   ^_^______^_^------or between number(\d) and dot(.)  
{{1}}

regex demo

答案 1 :(得分:1)

让我猜一下。你在&这里真的没有用过;您只是尝试使用&替换某些减号,这样他们就不会干扰您尝试用来查找所有数字的split(所以split在原始示例中没有将"-7-11"作为数组元素之一返回)。这是对的吗?

如果我的猜测正确,那么正确的答案是:不要使用split。这是工作的错误工具。 split的目的是通过查找分隔符模式(例如空格或逗号序列)来分割字符串;但是分隔符之间元素的格式并不重要。但是,在您的情况下,您正在寻找特定数字格式的元素(它可能以-开头,否则将至少有一个数字,最多只有一个句号;我不知道您的确切的要求是)。在这种情况下,代替split,正确的方法是为您想要数字的模式创建正则表达式,然后在循环中使用m.find(其中{{1}获取所有数字是m}。

如果您需要以不同方式处理某些Matcher字符(例如,在-中,您希望第二个-7-11成为运算符而不是-11的一部分),那么您可以在循环中对其进行特殊检查,并跳过您知道要作为运算符处理的-个标记。

它更简单,读者会理解你正在尝试做什么,并且它不容易出错,因为你所要做的就是确保表达数字的模式准确地反映了什么你正在寻找。

新的Java程序员认为正则表达式很常见,而-是可以解决所有问题的神奇工具。但通常结果太复杂(代码使用过于复杂的正则表达式,或依赖于欺骗,如必须暂时用split替换字符)。我无法查看您的原始代码,并使自己相信它的工作正常。这不值得。

答案 2 :(得分:0)

您可以使用lookahead and lookbehind来匹配数字或点:

input.replaceAll("(?<=[\\d\\.])-(?=[\\d\\.])","&")

查看此fiddle