将数组中的每个元素拆分为多个数组

时间:2018-07-23 03:43:00

标签: java arrays

我有一个数组,每个元素中都有2个数据字段:

String[] myArr = {"Bob    Marley", "Barbara    Newton", "John    Smith"};

名字和姓氏,并用制表符(“ \ t”)分隔。 我将如何将它们分成两个数组,例如:

String[] firstName = {"Bob", "Barbara", "John"};
String[] lastName = {"Marley", "Newton", "Smith"};

我最初尝试了split(“ \ t”),但是那没有用,并且我试图在这里查找类似的问题也没有用。

需要注意的一件事,我没有使用ArrayList。

任何帮助将不胜感激。预先谢谢你。

代码段:

public static String[] sortNames(String[] info) {

    String[] firstName = new String[info.length];
    String[] lastName = new String[info.length];

    for(int i = 0; i < info.length; i++) {
        firstName[i] = info[i].split("\t");
    }

    return firstName;
}

4 个答案:

答案 0 :(得分:2)

firstName[i] = info[i].split("\t");为元素分配了一个数组,它将导致编译失败。

public static String[] sortNames(String[] info) {

    String[] firstName = new String[info.length];
    String[] lastName = new String[info.length];

    for(int i = 0; i < info.length; i++) {
        String[] infos = info[i].split("\t");
        firstName[i] = infos[0];
        lastName[i] = infos[1];
    }

    return firstName;//also,you might need to change your return type to String[][] so that both array can be returned
}

答案 1 :(得分:0)

您可以让您的sortNames方法返回一个二维数组:

import java.util.Arrays;

class Main {
  public static void main(String[] args) {
    String[] myArr = {"Bob    Marley", "Barbara    Newton", "John    Smith"};
    String[][] names = sortNames(myArr);
    String[] firstNames = names[0];
    String[] lastNames = names[1];
    System.out.println("names: " + Arrays.deepToString(names));
    System.out.println("firstNames: " + Arrays.toString(firstNames));
    System.out.println("lastNames: " + Arrays.toString(lastNames));
  }

  public static String[][] sortNames(String[] info) {
    int infoArrLength = info.length;
    String[][] names = new String[2][infoArrLength];
    for(int i = 0; i < infoArrLength; i++) {
      String[] infos = info[i].split("\\s+");
      names[0][i] = infos[0];
      names[1][i] = infos[1];
    }
    return names;
  } 
}

输出:

names: [[Bob, Barbara, John], [Marley, Newton, Smith]]
firstNames: [Bob, Barbara, John]
lastNames: [Marley, Newton, Smith]

答案 2 :(得分:0)

String[] myArr = {"Bob    Marley", "Barbara    Newton", "John    Smith"};
    String[] firstName = new String[myArr.length];
    String[] lastName = new String[myArr.length];
    for (int i = 0; i < myArr.length; i++) {
        String[] splitString = myArr[i].split("\\s+");
        firstName[i] = splitString[0];
        lastName[i] = splitString[1];
    }

答案 3 :(得分:0)

您可以简单地使用Java regx来执行splitting

  

\ s =>空格字符,是[\ t \ n \ x0b \ r \ f]的缩写

private static void splitArray(String[] arr) {
    int len = arr.length;
    String[] firstNames = new String[len];
    String[] lastNames = new String[len];
    for (int i = 0; i < len; ++i) {
        String[] names = arr[i].split("\\s+");
        firstNames[i] = names[0];
        lastNames[i] = names[1];
    }
    System.out.println(Arrays.deepToString(firstNames));
    System.out.println(Arrays.deepToString(lastNames));
}

如果您是我,那么我更喜欢使用javafx.util.Pair如下将名字和姓氏绑定在一起,而在Java 8中,使用stream可以使其更整洁:

private static void splitArrayUsingStream(String[] arr) {
    Pair[] pairs = Arrays.stream(arr).map(s -> {
        String[] names = s.split("\\s+");
        return new Pair<>(names[0], names[1]);
    }).collect(Collectors.toList()).toArray(new Pair[arr.length]);
    System.out.println(Arrays.deepToString(pairs));
}

这些方法将为我们提供输出:

[Bob, Barbara, John]
[Marley, Newton, Smith]
[Bob=Marley, Barbara=Newton, John=Smith]