3

既存の Java プログラム コードで、次のスニップを見つけました。

StringBuffer b = new Stringbuffer()
// fill the StringBuffer
(...)

String temp = b.toString();
return temp.subSequence(0, b.toString().length() - 1);

なぜ彼らsubSequenceが位置0から最後まで行ったのか理解できません...
文字列への変換後のStringBuilderの形式はそれほど醜いですか?

彼らが書いたコードはもう私の会社にはないので、彼らに尋ねることはできません...

皆さんが私を助けてくれることを願っています。

4

4 に答える 4

4

アイデアは、末尾から 1 文字を削除することです。すべての Java 標準ライブラリ クラスは、開始/終了インデックス パラメータに関する規則に従っていることに注意してください。スターは包括的で、終了は排他的です。また、コードが醜いことに同意します。

...
return b.subSequence(0, b.length() - 1);

より短く、より効率的です。また、StringBuffer は従来のクラスであり、より高速な StringBuilder に置き換えることができます

于 2013-08-09T08:58:24.660 に答える
1

サブシーケンス:

temp.subSequence(0, b.toString().length() - 1);

最後の文字を削除していて、同じ文字列を返していません。

于 2013-08-09T08:55:04.677 に答える
0
    StringBuffer b = new StringBuffer();
    b.append("a");
    b.append("b");
    b.append("c");
    String temp = b.toString();        
    System.out.println(temp); // now out put is abc

誰かがこれを部分文字列にしたい場合は、次のようにこれを部分文字列にすることができます。

    System.out.println(temp.subSequence(0, b.toString().length() - 1));
    System.out.println(temp.substring(0, b.toString().length() - 1));
于 2013-08-09T08:58:15.847 に答える
0

メソッドと同じなので、substring()どちらでも使えます。
StringBuffer docによると


sb.subSequence(begin, end)形式のこのメソッドの呼び出しは、呼び出し sb.substring (begin, end)
とまったく同じように動作し ます。このメソッドは、このクラスが CharSequence インターフェースを実装できるように提供されています。

于 2013-08-09T08:58:35.407 に答える