Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中将字符串分解为数组_Java_Arrays - Fatal编程技术网

在java中将字符串分解为数组

在java中将字符串分解为数组,java,arrays,Java,Arrays,我有一个字符串,我需要将其分解成块,并将每个块保存在一个数组中进行操作。我不知道块的长度,但我知道在第8个逗号之后,新记录开始。我能够将其分解为正确的块,并将其存储在循环中的StringBuffer中,但不确定如何将其添加到数组中 下面的代码显示了我到目前为止所做的工作: public static void main(String[] args) { //I would like to store each of these li

我有一个字符串,我需要将其分解成块,并将每个块保存在一个数组中进行操作。我不知道块的长度,但我知道在第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
publicstaticvoidmain(字符串[]args){
//我想将这些行中的每一行存储在一个数组中
字符串teachMod=(“1,TSM,501,SM1056,Simon Thorne,TCO200,24,30,”+
2、TSM、500、AC1157、Peter Jones、TCO104、24、60、+
“3,TSM,500,SM0156,西蒙·索恩,TCO113,12,60”+
4、TSM、500、AC1157、彼得·琼斯、TCO104、24、30、+
5、TSM、500、AC1156、Richard Adlam、TCO113、12、60、+
6、TSM、500、AC1157、彼得·琼斯、TCO109、12、90、+
7、TSM、503、SM0156、西蒙·索恩、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、西蒙·索恩、TCO207、12、30、+
“13、TSM、500、AC1157、Peter Jones、TCO112、24、30,”;
StringBuffer sb=新的StringBuffer();
char[]c=teachMod.toCharArray();
int j=0;
对于(int i=0;i
只需声明一个数组

String[] arr = new String[100];
int count = -1;
然后像这样加上

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

            array[++count] = sb.toString();

            System.out.println(sb);
            j=0;
            sb = new StringBuffer();
        }
  ArrayList<String[]> values = new ArrayList<String[]> ();
  String[] split = teachMod.split(",");

  for (int i = 0; i < split.length;) {
        String[] row = new String[8];
        for(int j=0;j<8;j++,i++){
           row[j]= split[i];
        }
        values.add(row);
  }

  String[][] rows = values.toArray(new String[0][]);
虽然我建议使用Arraylist而不是arrays,因为这样就不需要预先确定大小

  ArrayList<String> al = new ArrayList<Str>();
只需声明一个数组

String[] arr = new String[100];
int count = -1;
然后像这样加上

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

            array[++count] = sb.toString();

            System.out.println(sb);
            j=0;
            sb = new StringBuffer();
        }
  ArrayList<String[]> values = new ArrayList<String[]> ();
  String[] split = teachMod.split(",");

  for (int i = 0; i < split.length;) {
        String[] row = new String[8];
        for(int j=0;j<8;j++,i++){
           row[j]= split[i];
        }
        values.add(row);
  }

  String[][] rows = values.toArray(new String[0][]);
虽然我建议使用Arraylist而不是arrays,因为这样就不需要预先确定大小

  ArrayList<String> al = new ArrayList<Str>();

您可以将它们存储在如下数组中:

String[] teachMod = { "first line", "second line" /* other line*/ };

您可以将它们存储在如下数组中:

String[] teachMod = { "first line", "second line" /* other line*/ };

在获得8个逗号的行之后,可以使用
String[]arr=sb.toString().split(“,”)生成字符串数组


在获得8个逗号的行之后,可以使用
String[]arr=sb.toString().split(“,”)生成字符串数组

//初始化可以存储任意长度块的数组列表
ArrayList chunks=新的ArrayList();
StringBuffer sb=新的StringBuffer();
char[]c=teachMod.toCharArray();
int j=0;
对于(int i=0;i
//初始化可以存储任意长度块的数组列表
ArrayList chunks=新的ArrayList();
StringBuffer sb=新的StringBuffer();
char[]c=teachMod.toCharArray();
int j=0;
对于(int i=0;i
你喜欢这样吗

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

            array[++count] = sb.toString();

            System.out.println(sb);
            j=0;
            sb = new StringBuffer();
        }
  ArrayList<String[]> values = new ArrayList<String[]> ();
  String[] split = teachMod.split(",");

  for (int i = 0; i < split.length;) {
        String[] row = new String[8];
        for(int j=0;j<8;j++,i++){
           row[j]= split[i];
        }
        values.add(row);
  }

  String[][] rows = values.toArray(new String[0][]);
你喜欢这样吗

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

            array[++count] = sb.toString();

            System.out.println(sb);
            j=0;
            sb = new StringBuffer();
        }
  ArrayList<String[]> values = new ArrayList<String[]> ();
  String[] split = teachMod.split(",");

  for (int i = 0; i < split.length;) {
        String[] row = new String[8];
        for(int j=0;j<8;j++,i++){
           row[j]= split[i];
        }
        values.add(row);
  }

  String[][] rows = values.toArray(new String[0][]);

已经有一些很好的建议了,但我正在查看您的算法,它只是看起来有点……对我来说太长了;)

所以我提出了这个,它使用了一个事实,你知道一个新的记录从每8个逗号开始。考虑到这一点,我能够将
teachMod
字符串
拆分为一个数组,并简单地按每条记录进行步进

我只是简单地使用
System#arraycopy
创建数组的新子副本,并将它们添加到
ArrayList

现在,在这个混乱的地方,实际上可以计算出预期记录的数量,但我懒得麻烦;)

import java.util.ArrayList;
导入java.util.List;
公共类中断字符串{
公共静态void main(字符串[]args){
字符串teachMod=(“1,TSM,501,SM1056,Simon Thorne,TCO200,24,30,”
+2、TSM、500、AC1157、Peter Jones、TCO104、24、60、
+“3,TSM,500,SM0156,西蒙·索恩,TCO113,12,60”
+4、TSM、500、AC1157、彼得·琼斯、TCO104、24、30、
+5、TSM、500、AC1156、Richard Adlam、TCO113、12、60、
+6、TSM、500、AC1157、彼得·琼斯、TCO109、12、90、
+7、TSM、503、SM0156、西蒙·索恩、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,西蒙·索恩,TCO20