1

チャンクに分割し、操作のために各チャンクを配列に保持する必要がある文字列があります。チャンクの長さはわかりませんが、8 番目のコンマの後に新しいレコードが始まることはわかっています。それを正しいチャンクに分割しStringBufferてループ内に保存することはできますが、それを配列に追加する方法がわかりませんか?

以下のコードは、これまでに行ったことを示しています。

    public static void main(String[] args) {
                            //I would like to store each of these lines in an array
        String teachMod =  ("1,TSM,501,SM1056,Simon Thorne,TCO200,24,30,"+
                            "2,TSM,500,AC1157,Peter Jones,TCO104,24,60,"+
                            "3,TSM,500,SM0156,Simon Thorne,TCO113,12,60,"+
                            "4,TSM,500,AC1157,Peter Jones,TCO104,24,30,"+
                            "5,TSM,500,AC1156,Richard Adlam,TCO113,12,60,"+
                            "6,TSM,500,AC1157,Peter Jones,TCO109,12,90,"+
                            "7,TSM,503,SM0156,Simon Thorne,CIS414,12,30,"+
                            "8,TSM,501,AC1156,Richard Adlam,TCO222,12,40,"+
                            "9,TSM,500,AC1156,Richard Adlam,TCO114,12,60,"+
                            "10,TSM,501,AC1157,Peter Jones,TCO200,60,40,"+
                            "11,TSM,500,AC1156,Richard Adlam,TCO106,24,60,"+
                            "12,TSM,501,SM0156,Simon Thorne,TCO207,12,30,"+
                            "13,TSM,500,AC1157,Peter Jones,TCO112,24,30,");
        StringBuffer sb = new StringBuffer();
        char[] c = teachMod.toCharArray();
        int j = 0;

        for(int i = 0; i < teachMod.length(); i++){
            sb.append(c[i]);
            if(c[i]==','){
                j++;
                if(j==8){
                    //At this point the variable sb holds what I want in an array
                    System.out.println(sb);
                    j=0;
                    sb = new StringBuffer();
                }
            }
        }
    }
}//End class
4

6 に答える 6

2
//initialise array list which can store any length of chunks
ArrayList<String> chunks = new ArrayList<String>();
    StringBuffer sb = new StringBuffer();
        char[] c = teachMod.toCharArray();
        int j = 0;

        for(int i = 0; i < teachMod.length(); i++){
            sb.append(c[i]);
            if(c[i]==','){
                j++;
                if(j==8){
                    //At this point the variable sb holds what I want in an array
                    //add chunk to chunk list
                    chunks.add(sb.toString());
                    System.out.println(sb);
                    j=0;
                    sb = new StringBuffer();


                }
            }
        }
    //convert chunk list to array
    String[] chunksAsArray = chunks.toArray(new String[chunks.size()]);
于 2013-11-12T06:46:09.940 に答える
0

8 つのコンマの行を取得したら、次を使用して文字列の配列を生成できます。String[] arr=sb.toString().split(",")

 if (j == 8) {
    //At this point the variable sb holds what I want in an array

    System.out.println(sb);
    String[] arr=sb.toString().split(",");
    for (String string : arr) {
        System.out.println("Arr value :"+string);
     }

    j = 0;
     sb = new StringBuffer();
  }
于 2013-11-12T06:42:30.030 に答える
0

すでにいくつかの優れた提案がありますが、私はあなたのアルゴリズムを探していましたが、少しだけ見えました...私にとっては長かったです;)

そこで、代わりにこれを思いつきました。これは、8 番目のカンマごとに新しいレコードが始まるという事実を利用しています。teachMod Stringを配列に分割し、各レコードを単純にステップ実行することができました。

私は単にSystem#arraycopy配列の新しいサブコピーを作成し、それらをArrayList.

さて、この混乱のどこかで、予想されるレコードの数を実際に計算することは可能ですが、私は気にするのが面倒です ;)

import java.util.ArrayList;
import java.util.List;

public class BreakingString {

    public static void main(String[] args) {
        String teachMod = ("1,TSM,501,SM1056,Simon Thorne,TCO200,24,30,"
                + "2,TSM,500,AC1157,Peter Jones,TCO104,24,60,"
                + "3,TSM,500,SM0156,Simon Thorne,TCO113,12,60,"
                + "4,TSM,500,AC1157,Peter Jones,TCO104,24,30,"
                + "5,TSM,500,AC1156,Richard Adlam,TCO113,12,60,"
                + "6,TSM,500,AC1157,Peter Jones,TCO109,12,90,"
                + "7,TSM,503,SM0156,Simon Thorne,CIS414,12,30,"
                + "8,TSM,501,AC1156,Richard Adlam,TCO222,12,40,"
                + "9,TSM,500,AC1156,Richard Adlam,TCO114,12,60,"
                + "10,TSM,501,AC1157,Peter Jones,TCO200,60,40,"
                + "11,TSM,500,AC1156,Richard Adlam,TCO106,24,60,"
                + "12,TSM,501,SM0156,Simon Thorne,TCO207,12,30,"
                + "13,TSM,500,AC1157,Peter Jones,TCO112,24,30,");
        String parts[] = teachMod.split(",");
        List<String[]> rows = new ArrayList<String[]>(25);
        for (int index = 0; index < parts.length; index += 8) {
            String[] record = new String[8];
            System.arraycopy(parts, index, record, 0, 8);
            rows.add(record);
        }

        String[] recordRows = rows.toArray(new String[rows.size()]);
    }

}
于 2013-11-12T06:57:07.217 に答える