好きな「お肉」は?

"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の上手な使い方がありましたら、教えていただけないでしょうか。
よろしくお願いします。

A 回答 (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();
}
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/30 23:31

活用できるか わからないですが


 文字数の分岐は 固定値として持たれている場合に
   (なので あんまり 再利用には向いてないかもです)

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("文字数不一致");
}
}
}

 可視性とかそっち系統は 一切考慮してません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/30 23:34

「指定した大きさで分割するメソッド」を作ればいいのでは? 例えば


void split(String aString, char [][] result, int [] sizes)
とかいうメソッドを作ってやる.
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/30 23:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報