2

Javaプログラムに「重い」文字列操作があります。これには、文字列を反復処理し、特定のセグメントをフィラー文字(通常は「@」)に置き換えることが含まれます。これらの文字は後で削除されますが、文字列の長さと現在のインデックスが反復中にそのまま維持されるように使用されます。

このプロセスでは通常、一度に複数の文字を置き換える必要があります。
たとえば、文字列内でを置き換える
必要がある場合があります。そのため、 xの長さの「@」の文字列を作成する必要があります。"cat""@@@""I love cats""I love @@@s"

Pythonでは、これは簡単です。

NewString = "@" *x

Javaでは、現在のメソッドが反抗的であることがわかります。

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

これを行うための適切な、事前に確立された方法はありますか?
誰かがもっと短く、もっと「ゴルフ」な方法を持っていますか?
ありがとう!


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

4

5 に答える 5

6

コメントが示唆している正規表現の種類は明確ではありませんが、指定された長さまで特定の文字で満たされた文字列を作成するのは非常に簡単です。

public static String createString(char character, int length) {
    char[] chars = new char[length];
    Arrays.fill(chars, character);
    return new String(chars);
}
于 2012-04-08T07:15:03.007 に答える
4

Guava にはちょっとしたいい方法がありStrings.repeat(String, int)ます。そのメソッドのソースを見ると、基本的には次のようになります。

StringBuilder builder = new StringBuilder(string.length() * count);
for (int i = 0; i < count; i++) {
  builder.append(string);
}
return builder.toString();
于 2012-04-08T07:14:49.113 に答える
1

長さ N の文字列を作成する方法は非常に非効率的です。StringBuffer便利なメソッドで使用するか、文字appendの配列を作成して、対応する.NString

于 2012-04-08T07:14:18.000 に答える
1

「フィラー」文字列で常に同じ文字を使用できますか? xの最大値を知っていますか? 任意の長さにカットできる定数を事前に作成できます。

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

// inside your method
String newString = FILLER.substring(0, x);
于 2012-04-08T07:17:59.917 に答える