Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
遍历从';一个';串至';另一个';Java中的字符串_Java_String - Fatal编程技术网

遍历从';一个';串至';另一个';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

我试图在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/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)}}
@ChetanHireholi
Date
是一个日期的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);}}}
@ChetanHireholi
Date
是一个日期的Java容器。它不负责打印日期时的格式。要对其进行格式设置,可以使用
日期格式化程序
如:
System.out.println(新的SimpleDataFormat(“yyy-MM-dd”).format(DateObject));
@ChetanHireholi它正在进行比较-为了进行比较,您使用的是dates对象(而不是它们的字符串表示形式)