web-dev-qa-db-ja.com

StringBuilderをString []に変換するにはどうすればよいですか?

次のコードは機能しますが、String []の要素数を修正します。 String []に動的に必要な要素の数を追加させる方法はありますか?

private static StringBuilder names = new StringBuilder();
...
public String[] getNames() {
    int start = 0;
    int end = 0;
    int i = 0;
    String[] nameArray = {"","","",""};

    while (-1 != end) {
        end = names.indexOf(TAB, start);            
        nameArray[i++] = names.substring(start, end);
        start = ++end; // The next name is after the TAB
    }
    return nameArray;
}
9
jacknad

だからあなたはタブで分割しようとしているだけですか?どうですか:

_return names.toString().split(TAB);
_

splitは正規表現パターンをとることに注意してください。したがって、split(".")がドットだけで分割されることを期待しないでください。たとえば:)

21
Jon Skeet

配列を動的に拡張するには、ArrayList<String>を使用します。APIで必要な場合は、結果をString[]に変換することもできます。

ArrayList<String> namesList = new ArrayList<String>( );

while (-1 != end) {
    end = names.indexOf(TAB, start);            
    namesList.add( names.substring(start, end) );
    start = ++end; // The next name is after the TAB
}

return namesList.toArray( new String[ namesList.size( ) ] );

そうは言っても、あなたの目的のために、他の人が提案したようにsplitを使用してください

Stringのメソッド split を使用して、1行でそれを行うことができます。

2

再帰的な実装を使用して、プログラムスタックを一時的な配列として使用できます。

public String[] getNames()
{
    return getNamesRecursively( names, 0, TAB, 0 );
}

private static String[] getNamesRecursively( StringBuilder str, int pos, String delimiter, int cnt )
{
    int end = str.indexOf( delimiter, pos );
    String[] res;
    if( end >= 0 )
        res = getNamesRecursively( str, end + delimiter.length(), delimiter, cnt + 1 );
    else
    {
        res = new String[ cnt + 1 ];
        end = str.length();
    }
    res[ cnt ] = str.substring( pos, end );
    return res;
}
1
x4u

文字列myLocation = builder.toString();

0
Ashwin H