使用拆分方法拆分字符串

时间:2014-08-05 22:12:23

标签: java

我有一个我希望分割的字符串文本,我想得到的结果是当我采用文本/拆分输出时每个部分都像例如:姓名: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 ....... 对于文本中的每个第一个字符,它都是这样的。请有人看看并告诉我我在哪里错了?

2 个答案:

答案 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);
}

Demo.

答案 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 [])

相关问题