我有以下格式的字符串:

[string1][string2][string3][string4][string5][string6]

其中第一个字符串string1将始终为Year,并且其格式将为YYYY,因此示例示例为:
[2010][Toyota][ALL][Hatchback][998ccm 68HP 50KW]

现在在某些情况下,string12010^K2011^K2012^K2013^K2014^K2015^K2016^K2017格式出现,其中每年用^K分隔符分隔。示例示例:
[2010^K2011^K2012^K2013^K2014^K2015^K2016^K2017][Toyota][ALL][Hatchback][998ccm 68HP 50KW]

现在,每当我看到以上格式的字符串时,我就必须解析年份字符串并在定界符上分割并提取每个单独的年份,然后以以下格式列出字符串:
[2010][Toyota][ALL][Hatchback][998ccm 68HP 50KW]
[2011][Toyota][ALL][Hatchback][998ccm 68HP 50KW]
[2012][Toyota][ALL][Hatchback][998ccm 68HP 50KW]
[2013][Toyota][ALL][Hatchback][998ccm 68HP 50KW]
[2014][Toyota][ALL][Hatchback][998ccm 68HP 50KW]
[2015][Toyota][ALL][Hatchback][998ccm 68HP 50KW]
[2016][Toyota][ALL][Hatchback][998ccm 68HP 50KW]
[2017][Toyota][ALL][Hatchback][998ccm 68HP 50KW]

所以我可以想到以下情况:
  • 如果year字符串只有一年,那么我将按原样使用它而不会拆分。
  • 如果year字符串中有多个年份,并用一些定界符将其分隔开,那么我将拆分该年份并相应地列出字符串,如上所示。
  • 如果由于某种原因该年份字符串中没有年份,那么我将使用该字符串,无论其存在与否,不进行任何分割或任何其他操作。

  • 这可能吗?我知道如何在特殊字符^上分割字符串,但是混乱的是如何提取string1并检查它是否有多年(如果是,则将其分割)还是只有一年,还是有其他东西。
      public static void main(String[] args) {
        // String myString =
        // "[2010^K2011^K2012^K2013^K2014^K2015^K2016^K2017][Toyota][ALL][Hatchback][998ccm 68HP 50KW]";
        String myString = "[2010][Toyota][ALL][Hatchback][998ccm 68HP 50KW]";
    
      }
    

    最佳答案

    我想出了这种方法:

    public static String[] splitYears(String str) {
        // get the year part of the string using a regex
        Matcher m = Pattern.compile("^\\[([\\d^K]+)\\]").matcher(str);
        if(m.find()) {
            String yearPart = m.group(1);
            // separate the other parts. The + 2 here is to account for the two square brackets in the yearPart
            String otherParts = str.substring(yearPart.length() + 2);
            // split by ^K
            String[] years = yearPart.split("\\^K");
            // Construct a new string for each year
            String[] newYears = new String[years.length];
            for (int i = 0; i < years.length; i++) {
                newYears[i] = String.format("[%s]%s", years[i], otherParts);
            }
            return newYears;
        } else {
            return new String[] {str};
        }
    }
    

    用法:
    System.out.println(Arrays.toString(splitYears("[2010^K2011^K2012^K2013^K2014^K2015^K2016^K2017][Toyota][ALL][Hatchback][998ccm 68HP 50KW]")));
    

    10-07 18:57
    查看更多