ozb*_*bek 1 java sorting android
给出以下字符:"R","G","B"和"X".它们必须一次一个地添加到现有String的长度从0到5不等的长度.这个长度包括特殊字符/.即,现有字符串可能如下所示:
null最终字符串应始终具有"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);
}
Run Code Online (Sandbox Code Playgroud)
我在这个问题上看不到任何模式,我能想到的只有几个嵌套if/else块.我怎样才能做到这一点?谢谢.
假设你有这个字符串"B/R/G".我会按照以下步骤来订购它:
拆分String "/",得到一个数组:
String str = "B/R/G";
String[] arr = str.split("/");
Run Code Online (Sandbox Code Playgroud)我会写自己的比较器.但由于订单不是自然顺序,我将使用字符串来获取所需的字符顺序:
final String order = "GRBX";
Run Code Online (Sandbox Code Playgroud)然后我将基于以下比较器对数组进行排序:
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);
Run Code Online (Sandbox Code Playgroud)然后我将再次加入数组元素"/",以获得最终排序的String.
你只需要确保,你不拆分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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
829 次 |
| 最近记录: |