我有一个列表:
[132567,Amelia, 123476,Charlie, 123516,Emily, 143456,George, 123466,Harry, 123457,Jack, 125456,Joshua, 132456,Lily, 123456,Oliver]
我想将此列表分为两部分,所以一个列表是ID,另一个列表是NAMES。还要求ID [1]必须与NAME [1]相对应,依此类推。
因此,从本质上讲,我希望有两个这样的列表:
id = [132567, 123476, 123516, 143456, 123466, 123457, 125456, 132456, 123456]
names = [Amelia, Charlie, Emily, George, Harry, Jack, Joshua, Lily, Oliver]
如何以最简单的方式执行此操作? 谢谢
答案 0 :(得分:1)
如果您确定ID始终以数字开头并且名称不是以数字开头,则可以尝试此操作。
String text = "132567, Amelia, 123476, Charlie, 123516, Emily, 143456, George, 123466, Harry, 123457, Jack, 125456, Joshua, 132456, Lily, 123456, Oliver";
ArrayList id = new ArrayList(), name = new ArrayList();
String[] split = text.split(",");
for (String string : split) {
if (Character.isDigit(string.trim().charAt(0))) {
id.add(string.trim());
} else {
name.add(string.trim());
}
}
如果要获取第6个元素,
System.out.println(id.get(5));
System.out.println(name.get(5));
输出应为
123457
Jack
答案 1 :(得分:0)
您可以按谓词进行分区(例如,一个与正则表达式上的字符串匹配的谓词):
String text = "132567,Amelia, 123476,Charlie, 123516,Emily, 143456,George, 123466,Harry, 123457,Jack, 125456,Joshua, 132456,Lily, 123456,Oliver";
Map<Boolean, List<String>> split = Arrays.asList(text.split(","))
.stream().map(String::trim)
.collect(Collectors.partitioningBy(s -> s.matches("^\\d+$")));
返回
{false=[Amelia, Charlie, Emily, George, Harry, Jack, Joshua, Lily, Oliver],
true=[132567, 123476, 123516, 143456, 123466, 123457, 125456, 132456, 123456]}
true
是数字列表(与数字模式匹配),而false
是名称列表(与数字模式不匹配)。
答案 2 :(得分:0)
因此,假设您有一个如下列表,可以通过与正则表达式匹配来迭代和分隔字符串和整数项目:
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("1234", "sadf", "1234124", "asdfas");
List<String> idList = new ArrayList(); // you can make it String or Integer
List<String> nameList = new ArrayList();
for (String item : list) {
// here we distinguish digits only
if (item.matches("^[0-9]*$")) {
idList.add(item);
}else {
nameList.add(item);
}
}
idList.forEach(System.out::println);
System.out.println("");
nameList.forEach(System.out::println);
}
}
输出:
1234
1234124
sadf
asdfas
答案 3 :(得分:0)
答案取决于您是否打算使用特定方法来解决此练习。
如果应该使用数组,则需要学习如何分辨特定项目的数组索引号是偶数还是奇数,以便可以将相应的项目定向到其他数组之一。查看模运算符。
如果您应该使用字符串,并且列表的格式与您所写的完全相同,那么您需要考虑可以使用哪些字符将列表首先分成几对,然后再拆分将它们配对成单独的项目,然后将其添加到其相应的列表中。
在不太可能发生的情况下,您应该使用“列表”的情况,那么上述数组的方法将起作用,但是基于问题的复杂性,我猜测列表会在以后出现。