如何在Java中用regex递归替换字符串

时间:2015-03-12 07:22:18

标签: java regex replace match regular-language

我正在寻找一些方法用Java中的regex替换字符串,如下所示:

(BatteryTemperature > 12.23)

我需要做的是将12.23替换为54.01,实际上是摄氏度到华氏度,如下所示:

(BatteryTemperature > 54.01)

但是,字符串可能是不同的条件,如:

(Signal = 90) AND (BatteryTemperature > 12.23)

(Signal = 90) OR (Latitude = 123.653) AND (BatteryTemperature > 12.23)

我有正则表达式如下

(\\((\\w+) (>|<|=) (\\d+.\\d+)\\))

但是,正则表达式(?R)似乎不支持java?

是否有任何其他方法可以通过转换来替换BatteryTemperature值。

(Signal = 90) OR (Latitude = 123.653) AND (BatteryTemperature > 54.01)

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我已经通过replaceAll()和Pattern解决了我的问题,但不太确定是否还有其他更好的方法。

        String sample = "(Signal = 90) OR (Latitude = 123.653) AND (BatteryTemperature > 54.01)"        
        String key = "BatteryTemperature";
        String[] array = sample.split(" AND | OR ");
        for(String tmp :array)
        {
            System.out.println("String: " + tmp);
            Pattern pattern = Pattern.compile("\\(("+key+") (>|<|=) (-?\\d+.\\d*)\\)");
            Matcher matcher = pattern.matcher(tmp);
            if(matcher.find())
            {
                for(int i = 0; i<=matcher.groupCount(); i++)
                {
                    if(matcher.group(i).equals(key))
                    {
                        sample = sample.replaceAll(matcher.group(i-1), key + " " + matcher.group(i+1) + " " + convertCelsiusToFahrenheit(matcher.group(i+2)));
                    }
                }
            }
        }

答案 1 :(得分:0)

你的问题太复杂了。你要的不是直接解决方案。首先恕我直言,找到像BatteryTemperature >这样的文本的indexOf。然后你应该检查在这个索引之后是否有类似于任何数字序列的字符串文本。在这里,您可以使用正则表达式来查找或使用TextUtils.isDigitsOnly()。当您找到数字时,您可以很容易地将其从C转换为F.

尝试将问题拆分为较小的部分。