• ベストアンサー

文字列の分割

"abcdefghijk"というような文字列を  例(1):abcd、efg、h、i、jk  例(2):ab、cdefg、h、ijk  例(3):a、b、c、de、f、ghijk のように分割したいのですが、substringを使って取得するしかないでしょうか。 素人考えですみませんが、 class test{ char[] a = new char[4]; char[] b = new char[3]; char c; char d; char[] e = new char[2]; } のようなクラスを作り、 test t = new test(); t = "abcdefghijk"; などどすることで、分割する方法はないでしょうか。  #上記を試したところ、互換性のない型とエラーになりました。 分割するパターンが複数あり、文字列が長くなるとsubstringを記述する回数が増え、 終了インデックスを間違えそうで。  #間違えないようにすればいいだけの話ですが。 substring以外の方法、またはsubstringの上手な使い方がありましたら、教えていただけないでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sh_hirose
  • ベストアンサー率66% (56/84)
回答No.3

こんなのとか public class Main { public static void main(String[] args) { int[] points = { 4, 7, 8, 9 }; Test test = new Test("abcdefghijk", points); System.out.println(test); } } public class Test { private ArrayList<String> strs = new ArrayList<String>(); public Test(String str, int[] points) { int count = 0; StringBuffer sb = new StringBuffer(); for( int i = 0; i < str.length(); i++ ) { char c = str.charAt(i); if( count < points.length && i == points[count] ) { strs.add(sb.toString()); sb = new StringBuffer(); count++; } sb.append(c); } strs.add(sb.toString()); } public String toString() { StringBuffer sb = new StringBuffer(); for( String str : strs ) { sb.append(str).append(","); } return sb.deleteCharAt(sb.length() - 1).toString(); } }

north357
質問者

お礼

サンプルの提示ありがとうございます。 参考にさせて頂きます。 回答ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • mahojula
  • ベストアンサー率32% (21/65)
回答No.2

活用できるか わからないですが  文字数の分岐は 固定値として持たれている場合に    (なので あんまり 再利用には向いてないかもです) import java.util.ArrayList; public class Main { int[] moji = new int[]{4, 3, 1, 1, 2}; //文字の切り分け方 ArrayList al = new ArrayList(); public static void main(String[] args) { Main t = new Main(); } public Main() { try { String inStr = "abcdefghijk"; //分割する文字列 check(inStr); //文字数チェック setStr(inStr); //ArrayList に 分割文字格納 alPrint(al); //とりあへず出力 } catch (Exception e) { e.printStackTrace(); } } void setStr(String str) { int count = 0; for (int i = 0; i < moji.length; i++) { al.add(str.substring(count, count += moji[i])); } } void alPrint(ArrayList al) { for (int i = 0; i < al.size(); i++) { System.out.println(al.get(i)); } } void check(String inStr) throws Exception { int len = 0; for (int i = 0; i < moji.length; i++) { len += moji[i]; } if (len != inStr.length()) { throw new Exception("文字数不一致"); } } }  可視性とかそっち系統は 一切考慮してません。

north357
質問者

お礼

文字数の分岐は、ほぼ固定値なので 参考にさせて頂き自分でも考えてみたいと思います。 回答ありがとうございました。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「指定した大きさで分割するメソッド」を作ればいいのでは? 例えば void split(String aString, char [][] result, int [] sizes) とかいうメソッドを作ってやる.

north357
質問者

お礼

やはり自分でメソッドを作成しないといけないのですね。 他の方の回答も参考にして作成してみたいと思います。 回答ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A