2012-03-19 11 views
3

文字の配列を調べ、文字列のその文字を他の配列の平行文字に置き換えようとしています。文字列内の文字を置き換えることができません

private String replace(String input) 
{ 
    char[] first = {'a','e','o','s'}; 
    char[] second = {'@','3','0','$'}; 
    String myCopy = input.toLowerCase(); 


    for(int y = 0; y < first.length; y++) 
    { 
     myCopy.replace(first[y],second[y]); 
    } 


    return myCopy; 
} 

ここだと私は何を得るの例:

Enter a string: as the dog runs here 
Output: as the dog runs here 

それは常に無交換と同じ文字列を出力します。

私も使用してみました:

myCopy.replace('a','@'); 

and 

myCopy.replace("a","@"); 

とでReplaceAll方法。

提案がありますか?

答えて

12

文字列はJavaでは不変です。 replace()はありません変更あなたがそれを呼び出す文字列 - それは、の変更と新しい文字列を返します。だから、欲しい:

myCopy = myCopy.replace(first[y], second[y]); 

(それは不変だと同じことが、「見える」、それを変更するすべてStringの方法についても同様です。)

5

String.replace()は新しい文字列を返します。文字列はjavaでは不変です。

あなたが探しているのはおそらくStringBuilderです。あなたはそれを文字列から構築し、必要なだけ変更し、結果としてtoSting()によって不変のStringを生成することができます。

+0

ありがとうございます。だからシンプルな私はそれを実現しませんでした。 –

0

文字列は不変です。だからあなたのforループでは、あなたの操作は具体的な効果がありません。あなたは、元の変数にreplaceの結果を代入する必要があります。

for(int y = 0; y < first.length; y++) { 
    myCopy = myCopy.replace(first[y],second[y]); 
} 
0

これが動作しない理由は、あなたが配列に返される文字列値を代入していないということです。この:

 for(int y = 0; y < first.length; y++) 
    {  
    myCopy.replace(first[y],second[y]); 
    } 

はなっている必要があります

for(int y = 0; y < first.length; y++) 
    {  
    myCopy = myCopy.replace(first[y],second[y]); 
    } 
0

あなたがStringreplace()と混同されています。文字列はは変更不可能です。つまり、状態を変更することはできません。 replace()を呼び出すと、ソース文字列のコピーが作成され、それが返されます。このような何かを:

String replacedString = myCopy.replace(first[y],second[y]);

0

ミカルが言ったように、文字列は不変です。これがより集中的なプロセスで使用されている場合は、代わりにStringBufferを使用することができます。 StringBufferは変更可能ですが、それには直接比較可能なreplace()メソッドがないため、いくつかの追加作業が必要です。

関連する問題