2012-12-23 100 views
0

我有一个“平衡”字符串,其中包含一个美元符号。 我想修改这个标记,所以我可以将sting转换为double,但是我的代码不工作。Java。奇怪的行为string.replaceFirst()

这里是我试过:

String balance = "$5.30"; 
balance = balance.replaceFirst("$", ""); 

它看起来像代码没有任何区别。 为了使其更加怪异,下面的代码不正是我需要的:

String balance = "$5.30"; 
balance = balance.replaceFirst(".", ""); 

即使我可以只是使用2号代码,我想了解它为什么会导致这样的结果。

+0

看到一个教程:正则表达式。作为Javadocs状态,'replaceFirst()'将一个作为第一个参数。 –

+3

[将余额转换为双倍不是一个好主意](http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency)。 –

+0

@JohnFlatness谢谢,我会通过 –

回答

7

$.是java正则表达式世界中的特殊字符(元字符),您应该用反斜杠将其转义以便将其视为正常字符。

String balance = "$5.30"; 
balance = balance.replaceFirst("\\$", ""); 

String balance = "$5.30"; 
balance = balance.replaceFirst("\\.", ""); 

这样:

 String balance = "$5.30"; 
     balance = balance.replaceFirst("\\.", "").replaceFirst("\\$", ""); 
     System.out.println(balance); 

输出:530

只是想在正则表达式增加约$.意义更多的解释:

  1. $被用来检查线结尾如下
  2. .是用来匹配任何迹象

这里是为Regex in java

+0

阅读它[文档](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceFirst%28java.lang。字符串,%20java.lang.String%29)很清楚:*“用给定的替换替换此字符串中与给定**正则表达式**匹配的第一个子字符串。”* –

+0

这很简单!耶稣,非常感谢,它正在工作! :) –

+0

@VladSpreys请不要只是复制它,阅读关于正则表达式在oracle中的java跟踪它的基本正则表达式相当不错。而且如果你愿意接受答案,它也会是g8 :) – PermGenError