java - 仅当字符串中包含多个年份时才拆分字符串并创建自定义字符串

标签 java regex algorithm split

我有一个以下格式的字符串:

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

其中第一个字符串 string1 将始终为 Year 并且格式为 YYYY 因此示例为:

[2010][Toyota][ALL][Hatchback][998ccm 68HP 50KW]

现在在某些情况下,string1 以这种格式出现 2010^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]

所以我可以想到以下情况:

  • 如果年份字符串只有一年,那么我将按原样使用它,不进行任何拆分。
  • 如果年份字符串中有多个年份并由一些分隔符分隔,那么我将拆分那一年并相应地制作字符串列表,如上所示。
  • 如果由于某种原因该年份字符串中没有年份,那么我将按原样使用该字符串,不进行任何拆分或任何操作。

这可能吗?我知道如何在特殊字符 ^ 上拆分字符串,但混淆是如何提取 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]")));

关于java - 仅当字符串中包含多个年份时才拆分字符串并创建自定义字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48899608/

相关文章:

java - AWS 维护 - 如何管理 Java、Tomcat 和 MySQL 的更新?

java - 这两个用于查找二叉树最大深度的代码有什么区别?

java - Ehcache put 添加到堆上失败

algorithm - 哪些算法可用于生成时间表/时间表?

java - Hibernate boolean true_false 在 MySql 中产生一个字符......有时?

python - 使用正则表达式拆分 URL

java - 在 Java 中搜索 {{ 和 }} 之间的关键字的正则表达式

java - 正则表达式匹配引号中的字符串,里面有双引号

c++ - C++ DFS 中的迷宫回溯算法?

performance - 检测长列表中出现的对的算法