【问题标题】:How to recusively replace string by regex in Java如何在Java中用正则表达式递归替换字符串
【发布时间】:2015-03-12 07:22:18
【问题描述】:

我正在寻找一些方法来用 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+)\\))

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

有没有其他方法可以将 BatteryTemperature 值替换为转换后的值。

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

感谢任何帮助。

【问题讨论】:

  • 正则表达式与温度转换无关
  • Java replaceAll 方法接受正则表达式。但是,如果您使用上述正则表达式,请注意它不仅会替换您的 BatteryTemperature,还会替换 Signal 和 Latitude。 http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29
  • 嗨 Andremoniy,编辑我的错字。我正在寻找某种方法来用转换后的值替换 BatteryTemperature 项的值。温度转换将由另一个代码计算,而不是使用正则表达式
  • 你好,Min Naing Oo,谢谢你的建议。我会试试的。

标签: java regex replace match regular-language


【解决方案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)));
                    }
                }
            }
        }

【讨论】:

    【解决方案2】:

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

    试着把你的问题分解成更小的部分。

    【讨论】:

      猜你喜欢
      • 2011-10-28
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      相关资源
      最近更新 更多