代码之家  ›  专栏  ›  技术社区  ›  Bruce

如何在Java中用正则表达式替换字符串

  •  -1
  • Bruce  · 技术社区  · 10 年前

    我正在寻找在Java中用正则表达式替换字符串的方法,如下所示:

    (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+)\\))
    

    然而,regex(?R)在java中似乎不受支持?

    是否有其他方法用转换后的电池温度值替换电池温度值。

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

    感谢任何帮助。

    2 回复  |  直到 10 年前
        1
  •  1
  •   Bruce    10 年前

    我已经通过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)));
                        }
                    }
                }
            }
    
        2
  •  0
  •   deadfish    10 年前

    你的问题太复杂了。你要求的不是直接的解决方案。第一次IMHO尝试查找文本的indexOf,如 BatteryTemperature > 。然后您应该检查该索引之后是否有类似于任何数字序列的字符串文本。在这里,您可以使用正则表达式来查找或使用 TextUtils.isDigitsOnly() 当你找到数字时,你可以很容易地把它从C转换成F。

    试着把你的问题分成小块。