我有一个我希望分割的字符串文本,我想得到的结果是当我采用文本/拆分输出时每个部分都像例如:姓名:John,姓氏:Davidson,出生日期:05051968,出生地:伦敦。但我没有得到正确的结果。我的代码如下:
public class Person{
public String name;
public String lastName;
public String dateOfBirth;
public String placeOfBirth;
poblic void printDetails(){
String text = "John.Davidson/0505168/London Micheal.Bartson/06061680/Paris";
String[] newText = text.split("[./ ]");
for(int i=0; i<newText.length; i++){
String name = newText[i].split("")[0];
String lastName = newText[i].split("")[0];
String dateOfBirth = newText[i].split("")[0];
String placeOfBirth = newText[i].split("")[0];
System.out.println("Name: " + name + ", last name: " + lastName + ", date of birth: " + dateOfBirth + ", place of birth: " + placeOfBirth);
}
我得到的结果如下: 姓名:J,姓氏:J,出生日期:J,出生地:J 姓名:D,姓氏:D,出生日期:D,出生地:D ....... 对于文本中的每个第一个字符,它都是这样的。请有人看看并告诉我我在哪里错了?
答案 0 :(得分:2)
分割的结果以四个为一组,因此您需要将循环步长设置为4,并通过偏移0,1,2和3获取各个部分,如下所示:
for(int i=0; i<newText.length; i+=4){
String name = newText[i];
String lastName = newText[i+1];
String dateOfBirth = newText[i+2];
String placeOfBirth = newText[i+3];
System.out.println("Name: " + name + ", last name: " + lastName + ", date of birth: " + dateOfBirth + ", place of birth: " + placeOfBirth);
}
答案 1 :(得分:0)
你使用&#34;&#34;分裂这意味着分裂每个角色。然后你拿第一个角色。我不知道你为什么这样做。
总之,每个循环中发生的事情是它接受数组元素i的第一个字符([0]),然后将字符串中打印的每个值设置为该字符。相反,试试这个
String[] newText = text.split("[./ ]");
for(int i = 0; i < newText.length - 4; i+=4){
System.out.println("Name: " + newText[i] + ", last name: " + newText[i+1] + ", date of birth: " + newText[i+2] + ", place of birth: " + newText[i+3]);
}
然而,这是一个糟糕的解决方案,它依赖于固定大小的条目,不应该在实践中使用。如果有人以不同的顺序输入字符串,或者输入的输入太多或者输入的数量太少,该怎么办?尝试使用更灵活的设计,例如使用csv格式解析器,因此您总是使用逗号分割,行可以是类似
entry-type, entry
entry-type, entry2
entry-type, entry3
或类似的东西。试试看。总是试图寻找不依赖于精确输入的灵活解决方案,否则你会遇到异常和运行时问题,就像没有明天一样。
PS split()方法的意思是在指定输入的出现之间分割字符串,即[./],所以如果你想给出一个&#34;&不要使用它。 #34;,这与制作charArray没有什么不同(除了char [],它是String [])