35

トリム呼び出しごとに新しいインスタンスや新しいインスタンスを使用して作成することによってStringBuilder生じるオーバーヘッドなしに、どのように値をトリムできますか?StringBuilder.toString().trim()StringStringBuilder

4

5 に答える 5

26

StringBuilderにtrim()メソッドがないのはなぜですか

  1. それが設計された方法だからです。デザイナーに聞いてみてください1
  2. あまり必要がないからです。
  3. 文字列のtrim()セマンティクスと署名は可変文字列にはあまり適合しないためですが、それについては議論の余地があります。

いずれにせよ、答えはあなたの問題の解決には関係ありません。

StringBuilderの値をどのようにトリミングできますか?

最も簡単な方法は、を使用することStringBuilder.toString().trim()です...

StringBuilder.toString()。trim()は使いたくありません。

その場合は、裏で行うことを行う必要がありますtrim()。先頭と末尾の空白を一致させて削除します。APIには正規表現がサポートされていないためStringBuilder、これを難しい方法で行う必要があります。つまり、文字を前から前に繰り返し、後ろに終了して、削除する必要のある文字などを確認します。

簡単な方法でやりたくないと思いますか?そうでない場合、このQ&Aには、実装、分析、ベンチマークなどの例がいくつかあります。

StringBuilder最後に、メソッドを持つクラスの独自のバリエーションを実装できますtrim()。別の内部表現を使用して、最初に文字を削除する操作で文字がコピーされないようにすることができます。(私はこれをお勧めしません...しかし、あなたが実際的に強い必要性を持っているならば、それはオプションですtrim()。)


実際、私はこのStringBuilder文字列を他の多くの値と比較する必要があるループにいるので、StringBuilder.toString().trim()毎回呼び出すと、新しいインスタンスが作成され、毎回新しいStringオブジェクトを作成したくありません。

反対に、先頭から文字を削除するStringBuilderと、残りのすべての文字がコピーされます。

StringBuilderたぶん、最初は完全なものをに変えたほうがいいでしょう。そうすれば、などStringを使用するときに、文字2をコピーすることはありません。 trim()substring()


1-これを言うのは「建設的ではない」と主張する人々にとって、代替案は、設計上の決定がなされたときに私たち部屋にいたふりをして、起こった議論を聞いたということです。しかし、それは嘘になります。率直に言って、ここでは誰も答えを知らず、他のふりをしないことを指摘することは建設的です。なんで?多くの読者は、当時のJava設計プロセスが不透明であったことに気付かないからです。

2-Java 7より前では、これらのメソッドは、元のバッキング配列を共有する新しい文字列を作成することによって機能しStringます...したがって、文字列の制御情報のみをコピーすることになります。Java 7では、との実装を変更してtrimsubstringバッキング配列のサブ配列をコピーするStringコンストラクターを使用するようにしました。

于 2012-06-19T05:12:17.843 に答える
6

何を達成しようとしているのかわかりませんが、パフォーマンスが心配な場合は、StringBuilder に追加するときにトリムを実行できます。

stringbuilder.append(string.trim())

于 2012-06-19T08:20:45.923 に答える
2

StringBuilder に trim() メソッドがないのはなぜですか?

うーん..StringBuilderのようなものStringですが、作成後に変更できるという点が少し異なります。それ以外は文字列と同じです。

StringBuilder

上記のリンクで述べたように、StringBuilder の主な操作は追加メソッドと挿入メソッドです。と同じように、変更可能な文字列をサポートすることが提案されていると思いStringBufferます。そして、他のメソッドを少し呼び出してから目的のメソッドを呼び出すことで物事を成し遂げることができれば、どうすればよいでしょうか。複数のクラスで同じ実装が必要な理由。

StringBuilder 値をどのようにトリミングできますか?

他の人が言ったようにstringBuilder.toString().trim();

使いたくないStringBuilder.toString().trim()

うーん...選択の問題ですが、これには具体的な理由がありますか?

于 2012-06-19T05:14:30.303 に答える
0

後でトリミングできるStringBuilderインスタンスを変換できます。string

sb.toString().trim();//sb is stringBuilder Instance.
于 2012-06-19T05:00:43.670 に答える
0

使用しますStringBuilder.toString().trim()が、変数に保存します。

例えば:

String myTrimmedString = myStringBuilder.toString().trim();

trim()非常に簡単で、不変オブジェクトを使用する方がやや好ましいため、メソッドはありません。あるスレッドがトリミングしているときにStringBuilder、別のスレッドが追加されていると想像してください。コードで発生する可能性のあるバグや奇妙さを想像してみてください。

于 2012-06-19T05:17:41.803 に答える