-1
public static void main(String[] args) {
    String brandmodel="VolkswagenGolf";
    String [] splitedstring=new String[13]
        //how to insert every 3 letters in splitedstring array

}

私が欲しいのは、上記の文字列を3文字ごとに分割することです。たとえば、上記の文字列から次の Vol,ksw,age,nGo,lf を保存したいのですが、ここでいくつかのクレイジーなコードを読みましたが、理解できませんでした。最も簡単な方法が必要です。まだ正規表現を学んでいない

4

4 に答える 4

5
  1. パーツの数を計算し、配列を作成します。

    int parts = (string.length() + 2) / 3;
    String splitted[] = new String[parts];
    
  2. 次を使用して、配列を埋めString.substring(int, int)ます。

    for (int i = 0; i < parts; ++i)
    {
        int x = i * 3;
        splitted[i] = string.substring(x, Math.min(string.length(), x + 3));
    }
    

Substring は、インデックスを使用して、別の文字列から文字列を取り出します。問題は、文字列の外に出る範囲を取ると、例外がスローされることです。だから私がしていることは、を使用して endIndex を文字列の長さに制限することMath.min(int, int)です。渡された 2 つの値のうち最小のものを常に返します。

Math.min() を使用しないと、これがうまくいかない例:

String str = "test";
String substr = str.substring(2, 9);

9 が の範囲外であるため、これは失敗します (例外) strstrの長さはわずか 4 文字です。したがって、有効な startIndices は {0, 1, 2, 3} であり、この場合の有効な endIndices は {0, 1, 2, 3, 4} です。

于 2012-10-26T22:14:02.507 に答える
3

最後の一致に加えて任意の3文字に一致する正規表現後読みを使用できます。

String[] splitString = brandmodel.split("(?<=\\G...)");

正規表現(?<=\G...)は、最後の一致の(\G)後に3文字が続く空の文字列と一致し(...)ます((?<= ))

出力:

[Vol, ksw, age, nGo, lf]
于 2012-10-26T22:15:31.097 に答える
2

「クレイジーなコード」は必要ありません。比較的簡単です。

String[] res = new String[(s.length()+2)/3];
for (int i = 0 ; i != res.length ; i++) {
    res[i] = s.substring(3*i, Math.min(3*i+3, s.length()));
}

ideoneの場合:リンク

于 2012-10-26T22:14:54.623 に答える
0

すべての長さの文字列で機能します

       String brandmodel="VolkswagenGolf";
       List <String> splitedstring = new ArrayList<String>();
       int i = 0;
       while(brandmodel.length() > 2 )
       {
           splitedstring.add(brandmodel.substring(0,3));
           brandmodel = brandmodel.substring(3);
       }
       if(brandmodel.length() > 0)
           splitedstring.add(brandmodel);
于 2012-10-26T22:24:36.877 に答える