2017-07-11 10 views
3

このコードの目的は、文字列「A Happy」を「A Hippy」に変更することです。新しい文字列オブジェクトを作成する代わりに、charの配列を使用して編集した文字列を印刷する

String originalStr = "A Happy"; 
char[] charOriStr = originalStr.toCharArray(); 
charOriStr[3] = 'i'; //simplified code, we are supposed to loop through the String 

が改訂された文字列を印刷するには、私が使用します。

System.out.println(charOriStr); 

推奨される解決策は以下の通りであるしかし:

String revised = new String(charOriStr); 
System.out.println(revised); 

が、私は初心者だと私はもしわかりませんベストプラクティスのガイドラインとして推奨されるソリューションに従うべきですか?これに関するいくつかの指導を感謝します、ありがとう。

+0

なぜ 'String'の' replaceAll'メソッドを使用しないのですか? – Jobin

+0

'for(char ch:charOriStr)System.out.print(ch); System.out.println(); ' –

+2

最初のコードスニペットでは、' revised'は定義されていません。あなたが 'System.out.println(revised);'で直接それをフォローすると、 'revised'が不明であるというエラーが出るでしょう。 – Aaron

答えて

3

ここで、間違いなく間違っていると推薦された方は、ここで間違いがあります。あなたは既に手で文字配列を持っているので、単に文字列に変換する必要はありません。使用しているprintlnメソッドが文字列を内部のchar配列に再度変換するためです。

+0

あなたの最後の陳述がわかりません。 'あなたが使用しているprintlnメソッドは文字列を再び内部のchar配列に変換します。 – yogescicak

+1

@yogescicakつまり、printlnメソッドの内部実装をもう一度見ると、コンソールに出力する前にchar []を文字列に変換します –

2

StringBufferまたはStringBuilderを使用して、新しい入力を作成する代わりに同じ入力を編集することができます。

public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 
     StringBuilder str = new StringBuilder("A Happy"); 
     str.setCharAt(3,'i'); 
     System.out.println(str); 
    } 
} 

Bottomline - のStringBuilderをチェックし、あなたがそれを行うことができますクールなものがたくさんあります。

2

char[]は、8までの実装です。世界、ラテン、アラビア語、ギリシャ語、キリル文字などのすべてのスクリプトのUnicodeテキストを保持できるStringの場合。

文字列の抽象レベルを維持しています。抽象、そして確かに完全に完成しました。 車内のコイルを交換する場合は、部品の集合として戻すことは期待していません。

たとえば、charは、Unicodeの1つの形式であるUTF-16エンコードの2バイト値です。今日はintの値、いわゆるコードポイントは不規則性が少なくなっています。だからコードポイントに基づいて解決策を作ったことができ、それで中国語も処理できたはずです。

+0

申し訳ありませんが、私はここで論理を理解していませんでした。とにかく文字列はchar配列で内部的に形成されます。文字列の中で同じ問題が発生します。ではない ?私が間違っているなら、私を訂正してください。 –

+0

@SureshAtta 'String'のメソッドは、UTF-16サロゲートを適切に処理します。文字を1つずつ印刷することは、文字列全体を「UTF-8」に変換して印刷するのと同じ効果を持ちません。 – RealSkeptic

関連する問題