我在这里问了一个问题: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,忽略开头的减号( - )...
有什么问题,如果代码或解决方案出现问题,我该如何解决?
谢谢!
答案 0 :(得分:1)
问题在于\D
匹配任何字符而非数字。通过第一次替换操作,您可以删除所有缺点以及其他非数字。
解决方案很简单:将\D
转换为否定的字符类[^\d]
并在其中添加连字符,以避免在下一次replaceAll调用之前删除错误。
使用
String onlyDigits = currencyStringValue.replaceAll("[^-\\d]","").replaceAll("(?<!^)-","");
请参阅IDEONE demo