gpt4 book ai didi

java - 如何按排序顺序向现有字符串添加新字符?

转载 作者:行者123 更新时间:2023-11-29 10:15:50 25 4
gpt4 key购买 nike

给定以下字符:“R”、“G”、“B”和“X”。必须一次将它们添加到长度从 0 到 5 不等的现有 String 中。此长度包括特殊字符 /。即,现有字符串可能如下所示:

  • null
  • ""(空字符串)
  • “G”
  • “B/X”
  • “G/B”
  • “红/绿/蓝”
  • 等(上述的其他变体)

最后的字符串应该始终具有"G/R/B/X"的顺序:

  • G 必须是第一项。
  • X 必须是最后一项。
  • R 必须在 G 之后和 B 之前。
  • B 必须在 R 之后。

这些字符中的任何一个可能存在也可能不存在。

如果现有字符串只有一个字符,它看起来非常简单:

private String sortThemAll(String existingString, String newString) {
if (TextUtils.isEmpty(existingString)) {
return newString;
}

if (existingString.length() == 1) {
List<String> list = Arrays.asList(existingString, newString);
if (list.contains("G") && list.contains("R")) {
Collections.sort(list);
} else {
Collections.sort(list, Collections.reverseOrder());
}

return list.get(0).concat("/").concat(list.get(1));
}

if (existingString.length() == 3) { // e.g., "B/X"
// Assuming that existingString is already sorted
if ("G".equals(newString)) {
// G should always be the first item on the list
return newString.concat("/").concat(existingString);
}
if ("X".equals(newString)) {
// X should always be the last item on the list
return existingString.concat("/").concat(newString);
}
/*** I don't know how I should proceed from this point ***/
}

return existingString.concat("/").concat(newString);
}

我看不出这个问题有什么模式,我能想到的就是几个嵌套的 if/else block 。我怎样才能做到这一点?谢谢。

最佳答案

假设您有这个字符串 "B/R/G"。我将按照以下步骤进行订购:

  • 拆分 "/" 上的字符串,得到一个数组:

    String str = "B/R/G";
    String[] arr = str.split("/");
  • 我会编写自己的比较器。但由于顺序不是自然顺序,我将使用字符串来获取所需的字符顺序:

    final String order = "GRBX";
  • 然后我将根据以下比较器对数组进行排序:

    Comparator<String> comparator = new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
    // Get the index of both strings from the `order` string.
    // Lesser index means comes before.
    return order.indexOf(s1) - order.indexOf(s2);
    }
    };

    Arrays.sort(arr, comparator);
  • 然后我将在 "/" 上再次加入数组元素,以获得最终有序的字符串。

你只需要确保你没有拆分一个 null 字符串。

对于给定的字符串,您将获得以下列表:

"B/R/G"  -> [G, R, B]
"R/G/B" -> [G, R, B]
"G/B" -> [G, B]
"B/X" -> [B, X]
"G" -> G
"" -> ""
null -> // Handle this as required

关于java - 如何按排序顺序向现有字符串添加新字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18352952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com