遍历从';一个';串至';另一个';Java中的字符串
我试图在Java中遍历字符串列表。 我的名单包括:遍历从';一个';串至';另一个';Java中的字符串,java,string,Java,String,我试图在Java中遍历字符串列表。 我的名单包括: ["DataFileDownload/FD/722066/71493/2016/12/30/untitled-1.aux","DataFileDownload/FD/722066/71493/2016/12/31/untitled-2.aux","DataFileDownload/FD/722066/71493/2017/01/01/untitled-3.aux","DataFileDownload/FD/722066/71493/2016/0
["DataFileDownload/FD/722066/71493/2016/12/30/untitled-1.aux","DataFileDownload/FD/722066/71493/2016/12/31/untitled-2.aux","DataFileDownload/FD/722066/71493/2017/01/01/untitled-3.aux","DataFileDownload/FD/722066/71493/2016/01/02/untitled-4.aux"]
我从用户处读取的日期如下:
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
Date fromDate = fmt.parse("2016-12-30");
Date toDate = fmt.parse("2017-01-02");
Calendar fromCal = Calendar.getInstance();
fromCal.setTime(fromDate);
String fromYear = String.valueOf(fromCal.get(Calendar.YEAR));
String fromMonth = String.valueOf(fromCal.get(Calendar.MONTH)+1);
String fromDay = String.valueOf(fromCal.get(Calendar.DAY_OF_MONTH));
Calendar toCal = Calendar.getInstance();
toCal.setTime(toDate);
String toYear = String.valueOf(toCal.get(Calendar.YEAR));
String toMonth = String.valueOf(toCal.get(Calendar.MONTH)+1);
String toDay = String.valueOf(toCal.get(Calendar.DAY_OF_MONTH));
如果我想提取日期为2016年12月30日至2017年1月1日的字符串,即
"DataFileDownload/FD/722066/71493/2016/12/30/untitled-1.aux","DataFileDownload/FD/722066/71493/2016/12/31/untitled-2.aux","DataFileDownload/FD/722066/71493/2017/01/01/untitled-3.aux"
我正在使用以下循环:-
for(String s : NameList){
if((s.equals(fromYear) && s.equals(fromMonth) && s.equals(fromDay)) == true){
while((s.equals(toYear) && s.equals(toMonth) && s.equals(toDay)) != true){
System.out.println(s);
}
System.out.println(s);
}
我没有结果
但当我尝试这个:
for(String s : objectNameList){
if((s.contains(fromYear) && s.contains(fromMonth) && s.contains(fromDay))){
System.out.println(s);
}
}
我只得到:
"DataFileDownload/FD/722066/71493/2016/12/30/untitled-1.aux"
有人能告诉我如何改善我的循环条件吗
提前谢谢 在列表中逐个字符串并使用正则表达式提取日期,如下所示:
private static String getDate(String str) {
Pattern regex = Pattern.compile("\\.*(?<date>([0-9]{4}\\/[0-9]{2}\\/[0-9]{2}))");
Matcher matcher = regex.matcher(str);
boolean success = matcher.find();
return (success ? matcher.group("date") : null);
}
// Example:
String dateStr = getDate("DataFileDownload/FD/722066/71493/2016/12/30/untitled-1.aux");
然后,从用户处读取输入日期并将其保存为Date
对象
然后,您可以使用以下方法比较用户日期和列表中的日期:
java.util.Date.before(Date when);
java.util.Date.after(Date when);
比解析所有日期和使用字符串容易得多。在列表中逐个字符串,并使用正则表达式提取日期,类似于以下内容:
private static String getDate(String str) {
Pattern regex = Pattern.compile("\\.*(?<date>([0-9]{4}\\/[0-9]{2}\\/[0-9]{2}))");
Matcher matcher = regex.matcher(str);
boolean success = matcher.find();
return (success ? matcher.group("date") : null);
}
// Example:
String dateStr = getDate("DataFileDownload/FD/722066/71493/2016/12/30/untitled-1.aux");
然后,从用户处读取输入日期并将其保存为Date
对象
然后,您可以使用以下方法比较用户日期和列表中的日期:
java.util.Date.before(Date when);
java.util.Date.after(Date when);
比解析所有日期和处理字符串容易得多。将日期值从字符串转换为整数
int fromYear=Integer.parseInt(String.valueOf(fromCal.get(Calendar.YEAR)));
int fromMonth=Integer.parseInt(String.valueOf(fromCal.get(Calendar.MONTH)+1));
int fromDay = Integer.parseInt(String.valueOf(fromCal.get(Calendar.DAY_OF_MONTH)));
int toYear = Integer.parseInt(String.valueOf(toCal.get(Calendar.YEAR)));
int toMonth = Integer.parseInt(String.valueOf(toCal.get(Calendar.MONTH)+1));
int toDay = Integer.parseInt(String.valueOf(toCal.get(Calendar.DAY_OF_MONTH)));
然后拆分Sting列表,从for块内的字符串中获取年、月、日
String[] f = s.split("/");
int year1 = Integer.parseInt(f[4]);
int month1 = Integer.parseInt(f[5]);
int day1 = Integer.parseInt(f[6]);
然后应用逻辑匹配从日期到日期之间的日期
if((fromYear < year1) && (toYear > year1))
{
System.out.println(s);
}
else if((fromYear == year1))
{
if((fromMonth <= month1) && (fromDay >= day1))
{
System.out.println(s);
}
}
else if((toYear == year1))
{
if((toMonth >= month1) || (toDay == day1))
{
System.out.println(s);
}
}
if((起始年份<第1年)和&(终止年份>第1年))
{
系统输出打印项次;
}
else if((fromYear==year1))
{
如果((fromMonth=day1))
{
系统输出打印项次;
}
}
如果((本年度==第1年))
{
如果((明天>=月1)| |(今天==第1天))
{
系统输出打印项次;
}
}
将日期值从字符串转换为整数
int fromYear=Integer.parseInt(String.valueOf(fromCal.get(Calendar.YEAR)));
int fromMonth=Integer.parseInt(String.valueOf(fromCal.get(Calendar.MONTH)+1));
int fromDay = Integer.parseInt(String.valueOf(fromCal.get(Calendar.DAY_OF_MONTH)));
int toYear = Integer.parseInt(String.valueOf(toCal.get(Calendar.YEAR)));
int toMonth = Integer.parseInt(String.valueOf(toCal.get(Calendar.MONTH)+1));
int toDay = Integer.parseInt(String.valueOf(toCal.get(Calendar.DAY_OF_MONTH)));
然后拆分Sting列表,从for块内的字符串中获取年、月、日
String[] f = s.split("/");
int year1 = Integer.parseInt(f[4]);
int month1 = Integer.parseInt(f[5]);
int day1 = Integer.parseInt(f[6]);
然后应用逻辑匹配从日期到日期之间的日期
if((fromYear < year1) && (toYear > year1))
{
System.out.println(s);
}
else if((fromYear == year1))
{
if((fromMonth <= month1) && (fromDay >= day1))
{
System.out.println(s);
}
}
else if((toYear == year1))
{
if((toMonth >= month1) || (toDay == day1))
{
System.out.println(s);
}
}
if((起始年份<第1年)和&(终止年份>第1年))
{
系统输出打印项次;
}
else if((fromYear==year1))
{
如果((fromMonth=day1))
{
系统输出打印项次;
}
}
如果((本年度==第1年))
{
如果((明天>=月1)| |(今天==第1天))
{
系统输出打印项次;
}
}
Java不是首字母缩略词。您试图将字符串值等同于多个不同的值,并且您真的希望“DataFileDownload/FD/722066/71493/2016/12/30/untitled-1.aux”
等同于string.valueOf(fromCal.get(Calendar.YEAR))代码>。使用包含,但为了更可靠,您需要解析输入字符串。您需要解析字符串并删除它们!=true and==true,等于返回布尔值。正如JavaDevil所说,您需要从字符串中提取日期,然后compare@shmosel感谢您提醒Java不是首字母缩略词。您正在尝试将字符串值等同于多个不同的值,并且您真的希望“DataFileDownload/FD/722066/71493/2016/12/30/untitled-1.aux”
等同于string.valueOf(fromCal.get(日历年);
。使用contains,但为了更可靠,您需要解析输入字符串。您需要解析字符串并删除它们!=true和==true,等于返回布尔值。正如Java Devil所说,您需要从字符串中提取日期,然后compare@shmosel谢谢你的提醒hi@SHG,谢谢你的解决方案,我可以得到额外的奖励从字符串中计算日期。但是当我打印date
时,我得到:Fri Dec 30 00:00:00 IST 2016
。因此,当我使用循环时,它不是比较:for(string s:objectNameList){if(date.after(fromDate)){if(date.before(toDate)){finalObjectNames.add(s)}}
@ChetanHireholiDate
是一个日期的Java容器。它不负责打印时的格式。要格式化它,可以使用DateFormatter
如:System.out.println(新的SimpleDateFormat(“yyy-MM-dd”).format(theDateObject));
@ChetanHireholi它正在进行比较-为了进行比较,您使用的是dates对象(而不是它们的字符串表示形式)这正是正确的方法。谢谢,我也查过了。但是为什么我在循环中失败了?嗨@SHG,谢谢你的解决方案,我能够从字符串中提取日期。但是当我打印date
时,我得到:星期五12月30日00:00:00 IST 2016
。因此,当我为(字符串s:objectNameList)使用循环时,它没有进行比较{if(date.after(fromDate)){if(date.before(toDate)){finalObjectNames.add(s);}}}
@ChetanHireholiDate
是一个日期的Java容器。它不负责打印日期时的格式。要对其进行格式设置,可以使用日期格式化程序
如:System.out.println(新的SimpleDataFormat(“yyy-MM-dd”).format(DateObject));
@ChetanHireholi它正在进行比较-为了进行比较,您使用的是dates对象(而不是它们的字符串表示形式)