Java 为什么将行拆分为数组后,for循环后面的代码不';不行?
在这个循环中,arraylist中的字符串被分割,每个单词都被插入到一个数组中。我只需要第二个位置的日期就可以与我通过的日期进行比较。如果不存在,则从arraylist中删除整个字符串 因此,我使用迭代器。一切正常,但是for循环之后的代码不起作用。消除数组中的单词插入可以解决所有问题。我在其他地方也用了同样的方法,但它没有问题,我不明白Java 为什么将行拆分为数组后,for循环后面的代码不';不行?,java,arrays,arraylist,output,Java,Arrays,Arraylist,Output,在这个循环中,arraylist中的字符串被分割,每个单词都被插入到一个数组中。我只需要第二个位置的日期就可以与我通过的日期进行比较。如果不存在,则从arraylist中删除整个字符串 因此,我使用迭代器。一切正常,但是for循环之后的代码不起作用。消除数组中的单词插入可以解决所有问题。我在其他地方也用了同样的方法,但它没有问题,我不明白 CreateMap(ArrayList<String> eventi,String data) throws ParseException {
CreateMap(ArrayList<String> eventi,String data) throws ParseException {
list_eventi = eventi;
intervallo = data;
String [] periodo;
String[] arrayData;
periodo = intervallo.split("-");
String data_in = periodo[0];
String data_fin = periodo[1];
SimpleDateFormat format = new SimpleDateFormat("ddMMyyyy");
Date dateIn = format.parse(data_in);
Date dateFin = format.parse(data_fin);
String[] line;
for (Iterator<String> iter = eventi.listIterator(); iter.hasNext(); ) {
String a = iter.next();
line = a.split(" "); //this is the problem//
String d = line[2];
Date dateImport = format.parse(d);
if(!dateImport.before(dateIn) && !dateImport.after(dateFin)) {
//date che sono nell'intervallo
// date between
System.out.println(d);
} else{
System.out.println("dati da eliminare " + a);
//iter.remove();
}
}
------------------------------ after this line the code doesn't execute
System.out.println("dati rimanenti");
System.out.println(list_eventi.toString());
//Map_for_login(eventi);
//Map_for_all(eventi);
CreateMap(ArrayList事件,字符串数据)引发ParseException{
列表\事件i=事件i;
区间=数据;
字符串[]周期;
字符串[]数组数据;
periodo=间隔分割(“-”);
字符串数据_in=periodo[0];
字符串数据_fin=periodo[1];
SimpleDataFormat=新的SimpleDataFormat(“ddMMyyyy”);
Date dateIn=format.parse(data_in);
Date dateFin=format.parse(数据\u fin);
字符串[]行;
for(迭代器iter=eventi.listIterator();iter.hasNext();){
字符串a=iter.next();
line=a.split(“”;//这就是问题所在//
字符串d=第[2]行;
Date dateImport=format.parse(d);
如果(!dateImport.before(dateIn)和&!dateImport.after(dateFin)){
//日期:che sono nell'intervallo
//日期介于
系统输出打印ln(d);
}否则{
系统输出打印项次(“dati da eliminare”+a);
//iter.remove();
}
}
------------------------------在这一行之后,代码不执行
System.out.println(“dati Rimananti”);
System.out.println(list_eventi.toString());
//映射用户登录(eventi);
//为所有人绘制地图(事件);
执行代码后没有错误消息,但在for循环后有其他方法和各种system.out,但它们不起作用,因为变量
eventi
是ArrayList
您可以使用.forEach()
方法
修正:
List resEventi=new ArrayList();//结果eventi ArrayList只包含正确的值
eventi.forEach(a->{
行=a.拆分(“”);
字符串d=第[2]行;
Date dateImport=format.parse(d);
如果(!dateImport.before(dateIn)和&!dateImport.after(dateFin)){
//日期:che sono nell'intervallo
//日期介于
保留。添加(a);
系统输出打印ln(d);
}否则{
系统输出打印项次(“dati da eliminare”+a);
}
});
如果您传入了正确的数据(可能会出现由
format.parse(d)
引发的异常),那么这应该是可行的。因为变量eventi
是数组列表
,您可以使用.forEach()
方法
修正:
List resEventi=new ArrayList();//结果eventi ArrayList只包含正确的值
eventi.forEach(a->{
行=a.拆分(“”);
字符串d=第[2]行;
Date dateImport=format.parse(d);
如果(!dateImport.before(dateIn)和&!dateImport.after(dateFin)){
//日期:che sono nell'intervallo
//日期介于
保留。添加(a);
系统输出打印ln(d);
}否则{
系统输出打印项次(“dati da eliminare”+a);
}
});
如果您传入了正确的数据(可能会出现由
format.parse(d)
引发的异常),那么这应该是可行的.您应该遵循Java命名约定:变量名和方法名是用camelCase编写的。此外,您不应该使用过时的Date
和simpleDataFormat
类;使用Java.Time
包中提供的新Java日期和时间API。您应该遵循Java命名约定:变量names和方法名称是用camelCase编写的。此外,您不应该使用过时的Date
和simpleDataFormat
类;使用新的Java日期和时间API,可在Java.Time
package.Nono中找到,数据是正确的,因为我的字符串格式是“登录09042019 ac11b 45.463,9.188 A中”然后,日期位于第二个位置(日期格式ddmmyyyy)。很抱歉,我表达得不好。好的,我发现了问题。代码上没有,但我读的是file.txt。感谢您的支持。否,数据是正确的,因为我的字符串格式为“登录09042019 ac11b 45.463,9.188 A”,那么日期位于第二个位置(日期格式ddmmyyyy)。很抱歉,我表达得不好。好的,我发现了问题。代码上没有,但我读的是file.txt。感谢您的支持
List<String> resEventi = new ArrayList(); // the resulting eventi arrayList with only the correct values
eventi.forEach( a -> {
line = a.split(" ");
String d = line[2];
Date dateImport = format.parse(d);
if(!dateImport.before(dateIn) && !dateImport.after(dateFin)) {
//date che sono nell'intervallo
// date between
resEventi.add(a);
System.out.println(d);
} else{
System.out.println("dati da eliminare " + a);
}
});