2012-04-08 32 views
2

私はJavaプログラムで文字列を繰り返し処理しますが、多くの場合、文字列を繰り返し、特定のセグメントをフィラー文字(通常は "@")に置き換えます。これらの文字は後で削除されますが、文字列の長さと現在のインデックスが反復処理中にそのまま保持されるように使用されます。Java - 長さxの文字列を生成する

このプロセスでは、通常、一度に1文字以上を置換します。

私は 、"I love @@@s"を与えて、文字列"I love cats""@@@""cat"を交換する必要がある場合がありますので、多くの場合、私はX長さで、「@」の文字列を作成する必要があります。

これは簡単です。

NewString = "@" *x 

Javaでは、私の現在の方法が反抗的であることがわかります。

String NewString = ""; 
for (int i=0; i< x; i++) { 
    NewString = NewString.concat("@"); } 

これを行うための適切な事前設定された方法はありますか?
誰かが、より短く、よりゴルフ的な方法を持っていますか?
ありがとうございます!


仕様:
のJava SE(Jre7)
のWindows 7(32)

+1

なぜ新しい文字列を作成するのですか?なぜ正規表現を使用しないのですか? – vidit

+0

まず、文字列を大文字にしないでください。ややこしい。 Javaの命名規則では、変数は小文字になっています。 – jmort253

+0

私はviditに同意します:このために正規表現を使用してください。私は「@」で部分文字列を置き換えるとき –

答えて

6

簡単:

public static String createString(char character, int length) { 
    char[] chars = new char[length]; 
    Arrays.fill(chars, character); 
    return new String(chars); 
} 
+0

+1ああ、素敵な最適化と私の答えは、単一の文字です。 –

+0

これは適切な方法のようですが、依然としてコードの一口です。短く、非効率的な方法はありませんか?さもなければ、私は見かけの効率のためにこれに切り替えます。 –

+2

@AntiEarth:これは3行の1つの方法で、* one *場所に必要です。あなたはどこからでもそれを呼び出すことができます。 –

1

長さNの文字列を構築するあなたの方法は非常に非効率的です。便利なappendメソッドを使用してStringBufferを使用するか、N文字の配列を作成し、Stringの対応するコンストラクタを使用する必要があります。

+0

このappendメソッドを使用すると、効率性よりもむしろコードで「清潔」に向かいます。 –

+0

@AntiEarth - ジョンが言ったように、これらのオプションのどちらを選んでも、あなたは*多くの*時間を呼び出す*方法*に沸きます。 –

+0

@AntiEarthループがどこかにあります。一重線の清浄度が必要な場合は、境界線付きのアプローチをしない限り、独自の方法が必要です。固定ストリングの部分文字列。 – dasblinkenlight

4

グアバにはちょっとした素敵なメソッドStrings.repeat(String, int)があります。その方法のsourceを見ると、それは基本的にこれに金額:それは、与えられた長さはかなりあるとのコメントが示唆ますが、特定の文字で埋めた文字列を作成している正規表現のどのような私にははっきりしていない

StringBuilder builder = new StringBuilder(string.length() * count); 
for (int i = 0; i < count; i++) { 
    builder.append(string); 
} 
return builder.toString(); 
0

あなた常には「充填剤」の文字列に同じ文字を使用することができますし、Xの最大値を知っていますか?あなたは、任意の長さに切断することができる一定の前払いを作成することができます。

private static final FILLER = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"; 

// inside your method 
String newString = FILLER.substring(0, x); 
+0

それはいいライナーだけど、悲しいことに、最大限の文字を置き換えることは決してできない。 –

1

java.lang.Stringは不変です。したがって、文字列を連結すると一時的な文字列オブジェクトが作成されるため、処理が遅くなります。 StringBufferまたはStringBuilderのような可変バッファを使用することを検討する必要があります。 javaで文字列を操作する際のもう1つのベストプラクティスは、可能な限りCharSequence型を使用する方が好きです。これにより、toString()への不必要な呼び出しが回避され、基礎となる実装タイプを簡単に変更できます。

文字列を繰り返す1つのライナーを探していて、これが外部ライブラリを使用することを正当化する場合は、Apache CommonsライブラリのStringUtils.repeatをご覧ください。しかし、文字列を繰り返すという些細な作業のために別のライブラリを使うよりも、自分のコードを書くことができます。

関連する問題