Java:StringBuffer&連結
-
02-07-2019 - |
質問
JavaでStringBufferを使用して、次のように文字列を連結します。
StringBuffer str = new StringBuffer();
str.append("string value");
メソッド(ドキュメントを一目見ただけでは何も見つかりませんでしたが)または「パディング」を追加する他の方法があるかどうかを知りたいです。
説明させてください。文字列に何かを追加するたびに、次のように最後にスペースを追加します:
String foo = "string value";
str.append(foo + " ");
また、追加する呼び出しがいくつかあります..毎回、スペースを追加します。追加するたびにスペースが自動的に追加されるようにオブジェクトを設定する方法はありますか?
編集-
String input
StringBuffer query = new StringBuffer();
Scanner scanner = new Scanner(System.in);
scanner.UseDelimiter("\n");
do {
System.out.println("sql> ");
input = scanner.next();
if (!empty(input)) query.append(input);
if (query.toString().trim().endsWith(";")) {
//run query
}
}
while (!input.equalsIgnoreCase("exit");
gromが示唆するようにStringBuilderを使用しますが、それが今のコードの外観です
解決
これはヘルパーメソッド(テストされていないコード)を使用することで簡単に処理できると思います:
public String myMethod() {
StringBuilder sb = new StringBuilder();
addToBuffer(sb, "Hello").addToBuffer("there,");
addToBuffer(sb, "it").addToBuffer(sb, "works");
}
private StringBuilder addToBuffer(StringBuilder sb, String what) {
return sb.append(what).append(' '); // char is even faster here! ;)
}
または、流れるようなインターフェース(テストされていないコード)でBuilderパターンを使用することもできます:
public String myMethod() {
SBBuilder builder = new SBBuilder()
.add("Hello").add("there")
.add("it", "works", "just", "fine!");
for (int i = 0; i < 10; i++) {
builder.add("adding").add(String.valueOf(i));
}
System.out.println(builder.build());
}
public static class SBBuilder {
private StringBuilder sb = new StringBuilder();
public SBBuilder add(String... parts) {
for (String p : parts) {
sb.append(p).append(' '); // char is even faster here! ;)
}
return this;
}
public String build() {
return sb.toString();
}
}
この件についての記事があります。
お役に立てば幸いです! :)
他のヒント
StringBuilder を使用する必要があります。 。
可能な限り、ほとんどの実装で高速になるため、このクラスはStringBufferよりも優先して使用することをお勧めします。
StringBufferは最終版です。それから派生することはできません。 最善の解決策は、実際にパディングを追加することです。メソッドを作成し、PADDING-Constantを使用して、簡単に変更できるようにするか、パラメーターに追加することをお勧めします。
StringBuffer
をラップする新しいクラスを作成して、 appendWithTrailingSpace()
メソッドを追加できませんか?
CustomStringBuffer str = new CustomStringBuffer();
str.appendWithTrailingSpace("string value");
(メソッドを少し短くしたいかもしれませんが)
自分でスペースを追加するだけで、あなたの例のように簡単です。
別の可能性は、appendを呼び出すときにStringBuilderオブジェクトが自分自身を返すことです。つまり、次のことが可能です。
str.append("string value").append(" ");
それほど滑らかではありませんが、おそらく+&quot;よりも簡単な解決策です。 &quot;メソッド。
別の可能性は、PaddedStringBuilderなどのラッパークラスを構築することです。これは同じメソッドを提供しますが、継承できないため、必要なパディングを適用します。