Java在逗号之前替换字符串的一部分

时间:2017-04-06 18:12:51

标签: java string replace substring

我有一个数据格式的字符串fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

例如,我想回去1天,所以我想得到fastcgi.conf

我该怎么做?

请注意,它也可能是apr 17,2016,因此索引处的替换无效。

7 个答案:

答案 0 :(得分:2)

您可以使用 Java 8

只需转换为LocalDate即可。由于种种原因,它具有灵活的API。

以下是代码段:

public static void main(String[] args) throws ParseException {
    String dateStr = "apr 17,2016";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd,uuuu");

    // convert to local date
    LocalDate localDate = LocalDate.parse(dateStr, formatter.withLocale(Locale.ITALIAN));
    System.out.println("START DATE:\n" + localDate);

    // use all power of new java.time
    LocalDate oneDayBefore = localDate.minusDays(1);
    LocalDate oneMonthBefore = localDate.minusMonths(1);
    LocalDate oneWeekBefore = localDate.minusWeeks(1);
    LocalDate oneYearBefore = localDate.minusYears(1);

    System.out.println("RESULTS:");
    System.out.println(oneDayBefore);
    System.out.println(oneMonthBefore);
    System.out.println(oneWeekBefore);
    System.out.println(oneYearBefore);
}

<强>输出:

START DATE:
2016-04-17
RESULTS:
2016-04-16
2016-03-17
2016-04-10
2015-04-17

现在您需要将本地日期打印为字符串。

以下是示例:

    // use Java 8 features
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM dd,yyyy");
    String dt = dtf.format(oneDayBefore);
    System.out.println(dt);

<强>输出:

Apr 16,2016

答案 1 :(得分:2)

TL;博士

LocalDate.parse ( 
    "apr 17,2016" , 
    DateTimeFormatter.ofPattern ( "MMM dd,uuuu" ).withLocale( locale ) 
)

使用java.time

现代方式是使用java.time类。

您没有指定用于输入字符串的语言环境或人类语言。月份名称缩写中的初始小写字母不适合美国英语。所以我尝试了Java 8 Update 121提供的所有语言环境,忽略了因异常而失败的任何解析尝试。

注意我们如何在循环中调用DateTimeFormatter::withLocaleLocale确定(a)用于翻译日期名称,月份名称等的人类语言,以及(b)决定缩写,大小写,标点符号,分隔符等问题的文化规范。

您可以通过拨打LocalDate::minusDays来完成前一天的日期时间数学运算。

String input = "apr 17,2016";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MMM dd,uuuu" );

for ( Locale locale : Locale.getAvailableLocales ( ) ) {
    try {
        LocalDate ld = LocalDate.parse ( input, f.withLocale ( locale ) );
        System.out.println ( locale.getDisplayName ( ) + " → " + ld + " | day before: " + ld.minusDays ( 1 ) );
    } catch ( java.time.format.DateTimeParseException e ) {
        // Swallow this expected exception. No code needed here.
    }
}
System.out.println ( "Done." );

十九岁。

Italian → 2016-04-17 | day before: 2016-04-16
Swedish (Sweden) → 2016-04-17 | day before: 2016-04-16
Slovak → 2016-04-17 | day before: 2016-04-16
Estonian → 2016-04-17 | day before: 2016-04-16
Swedish → 2016-04-17 | day before: 2016-04-16
Serbian (Latin,Bosnia and Herzegovina) → 2016-04-17 | day before: 2016-04-16
Serbian (Latin,Montenegro) → 2016-04-17 | day before: 2016-04-16
Norwegian (Norway,Nynorsk) → 2016-04-17 | day before: 2016-04-16
Estonian (Estonia) → 2016-04-17 | day before: 2016-04-16
Serbian (Latin) → 2016-04-17 | day before: 2016-04-16
Dutch → 2016-04-17 | day before: 2016-04-16
Norwegian (Norway) → 2016-04-17 | day before: 2016-04-16
Dutch (Netherlands) → 2016-04-17 | day before: 2016-04-16
Italian (Switzerland) → 2016-04-17 | day before: 2016-04-16
Slovak (Slovakia) → 2016-04-17 | day before: 2016-04-16
Italian (Italy) → 2016-04-17 | day before: 2016-04-16
Dutch (Belgium) → 2016-04-17 | day before: 2016-04-16
Norwegian → 2016-04-17 | day before: 2016-04-16
Serbian (Latin,Serbia) → 2016-04-17 | day before: 2016-04-16
Done.

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 2 :(得分:1)

**注意:你应该使用日期类而不是字符串,但是有比我在这里使用的更好的类。 **我将编辑此答案以反映这一点,但您应该查看更适合当前Java版本的解决方案以及此处请求的精度(日期而不是毫秒)。

最强大的方法是将您的字符串转换为日期类,操纵日期,然后重新格式化。可以使用SimpleDateFormat类(Api docs)完成每个方向的转换,并且可以使用Calendar类(API docs)轻松完成日期更改

这会运行并从参数中获取日期,并按照您的要求输出减去一天的格式。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;

public class DateSubtractExample{
    public static String backOneDay(String inDate){
      SimpleDateFormat formatter = new SimpleDateFormat("MMM dd,yyyy");
      try{
          // turn your string into a date (if formatting is right)
          Date date1 = formatter.parse(inDate);
          // make a calendar, set it to the date, and subtract one day.
          Calendar cal = Calendar.getInstance();
          cal.setTime(date1);
          cal.add(Calendar.DATE,-1);
          // convert date back to input format. 
          return formatter.format(cal.getTime());
        }
        catch (ParseException bad){
                bad.printStackTrace();
                return "UNREADABLE DATE "+inDate+":"+bad;

        }
    }

    public static void main(String[] args) throws ParseException{
       System.out.println(DateSubtractExample.backOneDay(args[0]));
    }
}

答案 3 :(得分:0)

public String getPreviousDate(String oldDate) {
    String[] parts1 = oldDate.split(" "); // split the oldDate around " "
    String[] parts2 = parts1[1].split(","); // split the second part of oldDate around ","

    String month = parts1[0];
    int day = Integer.parseInt(parts2[0]);
    int year = Integer.parseInt(parts2[1]);
    ...
    return newDate;
}

答案 4 :(得分:0)

这将按照您的要求运行,请尝试这个经过测试的程序,因此无需担心

import java.text.SimpleDateFormat;  
import java.util.*;

public class DateExample{
    public static void main(String args[]) throws Exception {

        String date = "apr 16,2016";
    SimpleDateFormat formatter=new SimpleDateFormat("MMM dd,yyyy");  

    Date dateFormated =formatter.parse(date);  
    System.out.println(dateFormated);

    GregorianCalendar cal = new GregorianCalendar();
    cal.setTime(dateFormated);
    cal.add(Calendar.DATE, -1);

        Date newDate = cal.getTime();
    String stringDate = formatter.format(newDate);
        System.out.println(stringDate);
    }

}

答案 5 :(得分:0)

我觉得我不清楚你问的问题。我看到两个问题,一个与替换部分字符串有关,另一个与日期有关。我猜你的问题是关于约会的。所以我试图回答你的问题,想要将当前日期减少一天。

为此,您可以使用日历界面。

Calendar cal = Calendar.getInstance();
cal.setTime(myDate);
cal.add(Calendar.DAY_OF_YEAR,-1);
Date oneDayBefore= cal.getTime();

答案 6 :(得分:-1)

所以,Id使用string.split(“,”)。 示例代码:

String date="apr 1,2016";
String[] parts=date.split(",");
String month_and_day=parts[0];
String year=parts[1];
String[] parts_of_month_and_day=month_and_day.split(" ");
String month=parts_of_month_and_day[0];
String day=parts_of_month_and_day[1];
int m;
int d;
int y;
y=Integer.parseInt(year);
d=Integer.parseInt(day);
String[] months=new String[] {"jan","feb","mar","apr","may","jun","jul","aug","sep","okt","nov","dez"};
for (int i=0; i < 12 /*length of months*/; i++) {
     if (months[i].equals(month)) {
         m=i;
     }
}