2012-01-25 7 views
5

文字列(フィルタ)が別の文字列(formattedAmount)に含まれているかどうかを確認しようとしています。NumberFormatを使用すると、Equals()とindexOf()が動作しない

私はそれを動作させることができませんでしたので、純粋にテストを単純化するために、 "indexOf()"ではなく "equals()"を使用するようにコードを変更しました。 equalsメソッドは、私が期待するように動作しているようには見えません。

import java.math.BigDecimal; 
import java.text.NumberFormat; 
import java.util.Locale; 


public class utils 
{ 

    public utils() 
    { 
    } 

    public static void main(String[] args) throws Exception 
    { 
     String filter = "333 333,44"; 
     Number amount = new BigDecimal(333333.44); 

     NumberFormat nf = NumberFormat.getNumberInstance(Locale.FRANCE); 
     nf.setMinimumFractionDigits(2); 

     String formattedAmount = nf.format(amount); 

     if (formattedAmount.equals(filter)) 
     { 
      System.out.println("Working"); 
      } 
    } 
} 

それはIfステートメントを入力されていない理由を任意のアイデア:ここ

は私がやろうとしています何を複製し、その私が書いたダミースクリプトですか?

ありがとう

+2

あなたは実際にformattedAmount変数を印刷して何を得るのを見たことがありますか? – Tudor

+0

私はチューダーを持っています。それは333 333,44と思います。 –

+0

@トーマス・バックリー:私が疑っていたように、4番目の文字は実際にはスペースではなく、何か他のものです。 – Tudor

答えて

10

シンプルprintlnが真実を明らかにします:

System.out.println((int)formattedAmount.charAt(3) + " " + (int)filter.charAt(3)); 

プリント:FRANCEは桁区切りをロケールが空白文字ではありません

したがって
160 32 

、あなたの2つの文字列が等しくありません。

char s = 160; 
String filter = "333" + s + "333,44"; 
+1

この意味は?確かにスペースのように見えます。 –

+0

確かにスペースのように見えました。文字列バイトをチェックすると、通常のスペースと同じ文字ではないことがわかります。 –

+2

@Shredder:160は非改行スペース、32はNormalスペースです。http://htmlhelp.com/reference/charset/iso160-191.html – Tudor

2

文字列#は辞書編集で2つの文字列を比較します。したがって、equalsがtrueを返すには、両方の文字列が同じ内容でなければなりません。 2つの文字列が異なる文字を持っていることを確認しました:formattedAmount = 33 33 33 c2 a0 33 33 33 2c 34 34 vs filter = 33 33 33 33 33 33 2c 34 34.標準スペースは0x20、0xc2a0はおそらくノーブレークスペース。 等号がfalseを返すのは不思議ではありません。最初の3つの '3'の後に文字列が異なっています。

0

nf.formatを試してみては3者のグループ間の改行なしスペース(文字コード160)を出力しています。文字列が一致しないように、フィルタには通常のスペース(文字コード32)があります。

関連する問題