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