【问题标题】:Java: Extract values from a String?Java:从字符串中提取值?
【发布时间】:2018-11-28 00:09:32
【问题描述】:

我是 Java 新手,正在尝试从与日期相关的用户输入字符串中提取值并将其拆分为 DD-MM-YYYY 格式。

我尝试使用下面的代码:

String inputString = "s.param1"; 
String[] arraySplit_3 = inputString.split("-");
for (int i=0; i < arraySplit_3.length; i++){
    System.out.println(arraySplit_3[i]);
}

s.param1 获取用户的输入,我为它使用了一个单独的 excel 文件。

如果 s.param1 = 15-05-2010

我希望得到这个输出:

DD:15

MM:05

YYYY: 2010

有没有办法创建这样的方法?

【问题讨论】:

  • 我运行了你的代码,当我用s.param1 替换15-05-2010 时,我得到了 15, 05, 2010。似乎工作正常,有什么问题?
  • 这里的 DD 是字符串变量还是您想要显示为输出的东西?
  • 您可以尝试探索 java 的 SimpleDateFormat 的文档。或者您也可以通过使用 substring 来提取不同的部分来做手动方式
  • 如果s.param1 是可变的,那么你不应该在引号中使用它。否则它将是字符串。但是,当您设置日期而不是 s.param1 时,您创建的方法应该可以工作。

标签: java arrays string split


【解决方案1】:

使用java.time.LocalDate 解析。

// dd: Day of Month
// MM: Month of year
// yyyy: year, four digits
DateTimeFormatter format = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDate date = LocalDate.parse(inputString);
System.out.printf("DD: %d%nMM: %d%nYYYY: %n", 
    date.getDayOfMonth(), date.getMonthValue(), date.getYear());

【讨论】:

    【解决方案2】:

    如果您的s.param1 是在字符串中获取日期的变量,那么您不应该在引号中使用它。否则它将是字符串。并且变量名不能带点。可能是sParam1
    但是,当您设置日期而不是 s.param1 时,您创建的方法应该可以工作。

    // input "15-05-2010"
    String inputString = sparam1; 
    String[] arraySplit_3 = inputString.split("-");
    for (int i=0; i < arraySplit_3.length; i++){
        System.out.println(arraySplit_3[i]);
    }
    

    输出将是:
    15
    05
    2010

    如果您想在数字前添加一些字符,请不要使用 for 循环。 像这样使用它:

    // ...
    if (arraySplit_3 > 2) {
        System.out.println("DD: " + arraySplit_3[0]);
        System.out.println("MM: " + arraySplit_3[1]);
        System.out.println("YYYY: " + arraySplit_3[2]);
    }
    

    然后输出将是:
    DD: 15
    MM: 05
    年年:2010

    【讨论】:

    • 是的,s.param1 是一个变量。我在其中添加双引号时犯了一个错误。你的方法非常适合我。
    • @NickCzar ,很高兴能帮到你。
    【解决方案3】:

    你快到了,但也许不用费心使用循环

    String inputString = "15-05-2010"; 
    String[] arraySplit_3 = inputString.split("-");
    System.out.println("DD: " + arraySplit_3[0]);
    System.out.println("MM: " + arraySplit_3[1]);
    System.out.println("YYYY: " + arraySplit_3[2]);
    

    但是,如果您想要更奇特的东西,请使用 SimpleDateFormat

    【讨论】:

      【解决方案4】:

      为什么你不解析日期/日历对象?

      String input = "15-05-2010";
      SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
      Date date = format.parse(input);
      Calendar calendar = Calendar.getInstance() ;
      calendar.setTime(date);
      System.out.println(calendar.get(Calendar.YEAR));
      System.out.println(calendar.get(Calendar.MONTH));
      System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
      

      【讨论】:

      【解决方案5】:

      如果你想为此使用循环,我建议你在这里创建分割值的方法,我有一个示例代码

      public class licz {
      public static void main(String[] args) {
      
          List<String> list = new ArrayList<String>();
          list.add("15-05-2010");
          list.add("18-02-2015");
          extractValues(list);
      }
      
      private static void extractValues(List<String> list) {
          int change = 0;
          for (int i=0; i < list.size(); i++) {
              String[] split = list.get(i).split("-");
              for (String splitElement : split) {
                  switch (change) {
                      case 0:
                          System.out.println("DD: " + split[0]);
                          change++;
                          break;
                      case 1:
                          System.out.println("MM: " + split[1]);
                          change++;
                          break;
                      case 2:
                          System.out.println("YYYY: " + split[2]);
                          change=0;
                          break;
                  }
              }
          }
      }
      

      }

      【讨论】:

        猜你喜欢
        • 2019-10-15
        • 1970-01-01
        • 2020-03-30
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多