我有一个数组,每个元素中都有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;
}
答案 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]