【问题标题】:Find the substring between two "/"查找两个“/”之间的子字符串
【发布时间】:2018-10-30 05:08:17
【问题描述】:

对于这个程序,用户被告知以“mm/dd/yyyy”的形式输入数据,我正在尝试使用带有“/”参数的indexOf()方法将日期字符串分解为三个子串。

我试过这样做:

String monthString = dateString.substring(0,dateString.indexOf("/"));
    String dayString = 
    dateString.substring(dateString.indexOf("/"),DateString.indexOf("/")+1)

谢谢。 编辑。谢谢大家的回复,但是我的老师说我不能使用拆分功能。他说我可以只使用 indexOf("/") 和 substring() 来解决这个问题。我需要两次调用 indexOf("/") 和四次 substring()。

【问题讨论】:

  • 使用split 将日期字符串拆分为多个部分。
  • 根据您稍后对这些部分所做的操作,您还可以考虑使用日期解析方法(例如LocalDate.parse)。

标签: java string


【解决方案1】:
String[] element = dateString.split("/");
String strDay = element[0];
String strMonth = element[1];
String strYear = element[2];

这就是你要找的。​​p>

【讨论】:

  • 您甚至可以将每个数组元素转换为整数值:int month = Integer.parseInt(element[0]);,因为您的日期格式是 MM/dd/yyyy 而不是 dd/MM/yyyy
  • 我的回答适合这个问题,但是为了更好的解决方案,您可以尝试将 dateString 解析为Date
【解决方案2】:

您可以使用 Java Date API

代替 split() 方法
  String dateString = "10/30/2018";
    try {
        DateFormat dateFromatter = new SimpleDateFormat("MM/dd/yyyy");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateFromatter.parse(dateString));
        System.out.println("Date:" + calendar.get(Calendar.DATE));
        System.out.println("Month:" + calendar.get(Calendar.MONTH));
        System.out.println("Year:" + calendar.get(Calendar.YEAR));
    } catch (Exception e) {
        e.printStackTrace();
    }

输出

Date:30
Month:9
Year:2018

对于月份字段 Calendar.MONTH 从 0 开始,这意味着 Jan=0,Feb=1 请参考 Java Doc

【讨论】:

    【解决方案3】:

    dateString.split("[/]"); 为您提供字符串数组。 split() 函数在 regex 中接受输入,这就是添加 "[]" 的原因。

    如果 dateString 为“dd/mm/yy”,则 dateString.split("[/]") 返回由 {"dd","mm","yy"} 组成的 String 数组。

    【讨论】:

    • 方括号有什么作用?
    • 正则表达式写在方括号中。
    • dateString.split("/"); - 工作正常,为什么要使用"[/]"
    • 在这种情况下“/”不是正则表达式。但是如果你输入了没有方括号的正则表达式,它可能会导致问题。所以它的好习惯是使用方括号。它适用于两种情况。
    • @KhalidShah 正则表达式中的方括号表示一个字符类。 IE。这个结构匹配它之间的任何一个字符。 “/”是一个完美匹配单斜杠的正则表达式。
    【解决方案4】:

    如果您使用的是 Java 8 或更高版本并且实际上您正在处理日期和时间,那么我认为您应该在LocalDate.parse 尝试一下,对于您的问题,您可以轻松解决如:

    LocalDate theDate = LocalDate.parse("08/22/2018", DateTimeFormatter.ofPattern("MM/d/yyyy"));
    System.out.println("year: " + theDate.getYear() + " month: " + theDate.getMonthValue() + " day: " + theDate.getDayOfMonth());
    

    输出将是:

    year: 2018 month: 8 day: 22
    

    【讨论】:

      猜你喜欢
      • 2014-12-07
      • 2020-05-28
      • 2013-09-13
      • 2011-03-23
      • 2018-04-14
      相关资源
      最近更新 更多