如何在 Java 中用正则表达式递归替换字符串
How to recusively replace string by regex in Java
我正在寻找一些方法来用 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+)\))
然而,正则表达式 (?R) 似乎不支持 java?
有没有其他方法可以用转换后的值替换 BatteryTemperature 值。
(Signal = 90) OR (Latitude = 123.653) AND (BatteryTemperature > 54.01)
感谢任何帮助。
你的问题太复杂了。您要求的不是直接的解决方案。首先恕我直言,尝试查找文本的 indexOf,如 BatteryTemperature >
。然后你应该检查在这个索引之后,是否有类似于任何数字序列的字符串文本。在这里,您可以使用正则表达式找出或使用 TextUtils.isDigitsOnly()。当你找到数字时,你可以很容易地将它从 C 转换为 F。
尝试将您的问题分解成更小的部分。
我已经通过 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)));
}
}
}
}
我正在寻找一些方法来用 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+)\))
然而,正则表达式 (?R) 似乎不支持 java?
有没有其他方法可以用转换后的值替换 BatteryTemperature 值。
(Signal = 90) OR (Latitude = 123.653) AND (BatteryTemperature > 54.01)
感谢任何帮助。
你的问题太复杂了。您要求的不是直接的解决方案。首先恕我直言,尝试查找文本的 indexOf,如 BatteryTemperature >
。然后你应该检查在这个索引之后,是否有类似于任何数字序列的字符串文本。在这里,您可以使用正则表达式找出或使用 TextUtils.isDigitsOnly()。当你找到数字时,你可以很容易地将它从 C 转换为 F。
尝试将您的问题分解成更小的部分。
我已经通过 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)));
}
}
}
}