我有以下数据存储为大字符串。
"John Chips Monday \n"
"Tom Pizza Tuesday\n"
"Jerry IceCream Wednesday\n"
"Jennifer Coffee Thursday\n"
现在我想分割这个字符串,这样我就可以从这个字符串中获取单个数据,并将每个数据放在一个数组中。
names数组的每个元素都存储上面看到的名称,如names [0] = john,names [1] = Tom等。 食物阵列的每个元素都存储上面看到的食物,如食物[0] =薯片,食物[1] =披萨。
我试过这样做
John + "\t" + Chips + "-" + Monday + "\n"
Tom + "\t" + Pizza + "-" + Tuesday+ "\n"
Jerry + "\t" + IceCream + "-" + Wednesday+ "\n"
Jennifer + "\t" + Coffee + "-" + Thursday+ "\n"
String nameCol[] = data.split("\\t");
String foodCol[] = data.split("-");
我得到的输出几乎存在但是错误,因为它包含我不希望在数组中的数据,例如第一个数组的输出是
nameCol[0] = John
nameCol[1] = Chips -
nameCol[2] = Monday
元素0包含john,但其他元素包含我不想要的部分。
我尝试了限制,但这不起作用
String nameCol[] = data.split("\\t",1);
String foodCol[] = data.split("-",1);
答案 0 :(得分:1)
请勿单独使用它们,同时使用分隔符,例如:String dataArr\[\] = data.split("\t\n",1);
然后遍历String[]
:
for (int i = 0; i < dataArr.length; i+=2) {
String name = dataArr[i];
String food = dataArr[i+1];
// ... do whatever you want with them.
}
答案 1 :(得分:1)
这将有效:
String yourLine = "John Chips Monday\n"; // Read your line in here
String[] resultCol = yourLine.split(" ");
resultCol[2] = resultCol[2].split("\\n")[0];
System.out.println( resultCol[2] );
字符串上的第一个分割将为您提供&#34; John&#34;,&#34; Chips&#34;和&#34;星期一\ n&#34;。第二次拆分需要&#34;星期一\ n&#34;从数组中分裂出来。返回&#34;星期一&#34;回到数组resultCol[2]
的最终索引。从这里,您可以简单地将数组中的每个元素分配给您需要的数组。
答案 2 :(得分:0)
你应该:
List
,(列表可以动态增加其大小,而数组具有固定大小)column[0]
添加到名称列表中,column[1]
添加到食物列表中,依此类推添加其他列。或者如果您知道每行只有三个单词,您可以简单地使用扫描程序并迭代单词而不是分割行。
while(scanner.hasNext()){
listOfNames.add(scanner.next());
listOfFood.add(scanner.next());
listOfDays.add(scanner.next());
}
答案 3 :(得分:0)
根据您的数据,我假设您正在从文件中读取此值。如果您知道有多少行,则可以使用3个数组,每个数组用于需要重试的每种类型的数据。如果您不知道大小,可以使用3个ArrayLists。您的问题是,在进行拆分后,您没有将它们放入正确的数组中。以下代码假定您已将所有数据都包含在一个String中。
final String values[] = data.split("\\n");
final ArrayList<String> names = new ArrayList<String>();
final ArrayList<String> foods = new ArrayList<String>();
final ArrayList<String> days = new ArrayList<String>();
for (String line : values) {
String[] split = line.trim().split("[ ]+");
names.add(split[0]);
foods.add(split[1]);
days.add(split[2]);
}
您必须考虑的另一件事是检查数据是否总是在“行”上有3个值,否则需要进一步的错误检查。
答案 4 :(得分:0)
试试这个,
String str="John" + "\t" + "Chips" + "\t" + "Monday" + "-" + "Test"+"\n"+"chet";
String st1= str.replaceAll("(\\t)|(-)|(\n)"," ");
String []st=st1.split(" ");
for(String s : st)
System.out.println(s);
答案 5 :(得分:0)
如果你的字符串总是“[name] [food] [day]”,那么你可以这样做:
String[] names = new String[allData.length]; //A list of names
String[] food = new String[allData.length]; //A list of food
String[] day = new String[allData.length]; //A list of days
for(int i = 0 ; i < allData.length ; i++)
{
String[] contents = allData[i].split(" "); //Or use a similar delimiter.
names[i] = contents[0];
food[i] = contents[1];
day[i] = contents[2];
}
答案 6 :(得分:0)
试试此代码
String s = "John Chips Monday \n Tom Pizza Tuesday \n Jerry IceCream Wednesday \n Jennifer Coffee Thursday \n";
String split[] = s.split("\n");
String names[] = new String[split.length];
String foods[] = new String[split.length];
String days[] = new String[split.length];
for (int i = 0; i < split.length; i++) {
String split1[] = split[i].trim().split(" ");
names[i]=split1[0];
foods[i]=split1[1];
days[i]=split1[2];
System.out.println("name=" + names[i] + ",food=" + foods[i] + ",day=" + days[i]);
}