2012-12-23 99 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