Java 使用分隔符将数组拆分为数组数组
我有以下格式的数据:Java 使用分隔符将数组拆分为数组数组,java,arrays,Java,Arrays,我有以下格式的数据: ["DATA1-1","DATA1-2","DATA1-3","DATA1-4","","DATA2-1","DATA2-2","DATA2-3","DATA2-4","","DATA3-1","DATA3-2","DATA3-3","DATA3-4",""] 我想把这个数组分成几个数组,其中分隔符应该是一个空项(“”)。大概是这样的: [["DATA1-1","DATA1-2","DATA1-3","DATA1-4"],["DATA2-1","DATA2-2","DAT
["DATA1-1","DATA1-2","DATA1-3","DATA1-4","","DATA2-1","DATA2-2","DATA2-3","DATA2-4","","DATA3-1","DATA3-2","DATA3-3","DATA3-4",""]
我想把这个数组分成几个数组,其中分隔符应该是一个空项(“”)。大概是这样的:
[["DATA1-1","DATA1-2","DATA1-3","DATA1-4"],["DATA2-1","DATA2-2","DATA2-3","DATA2-4"],["DATA3-1","DATA3-2","DATA3-3","DATA3-4"]].
这是我想出的代码:
private List<List<String>> retrieveData(List<String> arrayIn)
{
List<List<String>> subArrays = new ArrayList<>();
List<String> tempArrays = new ArrayList<>();
for(int i=0; i<arrayIn.size(); i++)
{
if(!airwayIn.get(i).equals("") && i != (airwayIn.size()-1) )
{
tempArrays.add(airwayIn.get(i));
}
else if (airwayIn.get(i).equals("") || i == (airwayIn.size()-1) )
{
subArrays.add(tempArrays);
tempArrays = new ArrayList<>();
}
}
return subArrays;
}
谢谢大家! 下面是一个使用Java 8的解决方案:
private List<List<String>> retrieveData (List<String> list)
{
// get all the indexes of the empty strings
int [] indexes =
Stream.of(IntStream.of(-1), IntStream.range(0, list.size())
.filter(i -> list.get(i).equals("")), IntStream.of(list.size()))
.flatMapToInt(s -> s).toArray();
// Split into sub lists based on the indexes
List<List<String>> subLists =
IntStream.range(0, indexes.length - 2)
.mapToObj(i -> list.subList(indexes[i] + 1, indexes[i + 1]))
.collect(Collectors.toList());
System.out.println(subLists);
return subLists;
}
您可以通过一个简单的
for
循环来完成,例如:
String[] array = {"DATA1-1","DATA1-2","DATA1-3","DATA1-4","","DATA2-1","DATA2-2","DATA2-3","DATA2-4","","DATA3-1","DATA3-2","DATA3-3","DATA3-4",""};
List<List<String>> result = new ArrayList<>();
List<String> elements = new ArrayList<>();
for(String s : array){
if("".equals(s) && !elements.isEmpty()){
result.add(elements);
elements = new ArrayList<>();
}else{
elements.add(s);
}
}
//Add the remaining elements
if(!elements.isEmpty()){
result.add(elements);
}
System.out.println(result);
String[]数组={“DATA1-1”、“DATA1-2”、“DATA1-3”、“DATA1-4”、“DATA2-1”、“DATA2-2”、“DATA2-3”、“DATA2-4”、“DATA3-1”、“DATA3-2”、“DATA3-3”、“DATA3-4”、“DATA3-4”、“};
列表结果=新建ArrayList();
列表元素=新的ArrayList();
for(字符串s:数组){
如果(“.equals&&!elements.isEmpty()){
结果:添加(元素);
元素=新的ArrayList();
}否则{
元素。添加(s);
}
}
//添加其余元素
如果(!elements.isEmpty()){
结果:添加(元素);
}
系统输出打印项次(结果);
如果该工作代码属于此工作代码,则不在类似的帖子中注明。我没能早点找到它。非常感谢。我不认为仅仅因为它使用了流就更优雅了。在这种情况下,正常的for循环是最好的解决方案,因为有些人似乎对所有内容都投了否决票,然后投票删除答案。我不知道为什么,除非他们的标准是答案必须和快速答案一样简短。@ajb如果答案被否决,我希望能发表评论。除非答案完全错了,否则没有任何评论的向下投票没有任何意义。是的。。。不幸的是,SO的工作人员似乎不想需要一个。完全同意!
[[DATA1-1, DATA1-2, DATA1-3, DATA1-4], [DATA2-1, DATA2-2, DATA2-3, DATA2-4], [DATA3-1, DATA3-2, DATA3-3, DATA3-4]]
String[] array = {"DATA1-1","DATA1-2","DATA1-3","DATA1-4","","DATA2-1","DATA2-2","DATA2-3","DATA2-4","","DATA3-1","DATA3-2","DATA3-3","DATA3-4",""};
List<List<String>> result = new ArrayList<>();
List<String> elements = new ArrayList<>();
for(String s : array){
if("".equals(s) && !elements.isEmpty()){
result.add(elements);
elements = new ArrayList<>();
}else{
elements.add(s);
}
}
//Add the remaining elements
if(!elements.isEmpty()){
result.add(elements);
}
System.out.println(result);