正则表达式不适用于方法replaceAll() - Android

时间:2016-03-22 23:15:45

标签: java android regex

我在这里问了一个问题:Regex: Differentiate boundary match ^ and Negation关于在方法replaceAll()中应用的正则表达式,获取只有数字的字符串和减号( - )以允许负数。我运行了跟随,它在我的java解释器中工作正常:

String onlyDigits = currencyStringValue.replaceAll("[\\D-]","").replaceAll("(?<!^)-","");
  

如果我输入: - 25#54d51 - &gt;返回:-255451

     

25#54-d51 - &gt;返回:255151

     

-25#54d51 - &gt;返回:-255451

     

dz-255451 - &gt;返回:-255451

但我在Android Studio中尝试相同的事情,只返回数字,调试应用程序,我注意到onlyDigits只获得数字0-9,忽略开头的减号( - )...

有什么问题,如果代码或解决方案出现问题,我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:1)

问题在于\D匹配任何字符而非数字。通过第一次替换操作,您可以删除所有缺点以及其他非数字。

解决方案很简单:将\D转换为否定的字符类[^\d]并在其中添加连字符,以避免在下一次replaceAll调用之前删除错误。

使用

String onlyDigits = currencyStringValue.replaceAll("[^-\\d]","").replaceAll("(?<!^)-","");

请参阅IDEONE demo