输入:bbdeaaccc
输出:aabbcccde
我正在尝试对字符串进行大小写排序--不敏感地不导入任何东西。使用java.util.arrays
很容易做到这一点,但我想不出没有它的方法。我只把它分类到acdabcce...有什么想法吗?
String str = "bbDeaAcCc";
char[] strArr = str.toCharArray();
char temp = 0;
for (int i = 0; i < str.length(); i++) {
for (int j = 0; j < str.length(); j++) {
if (strArr[j] > strArr[i]) {
temp = strArr[i];
strArr[i] = strArr[j];
strArr[j] = temp;
}
}
}
作为解决方案之一,您可以使用PriorityQueue
。
public static String sortIgnoreCase(String str) {
Queue<Character> queue = new PriorityQueue<>(
Comparator.comparingInt((ToIntFunction<Character>)Character::toLowerCase)
.thenComparingInt(ch -> (int)ch));
for (int i = 0; i < str.length(); i++)
queue.add(str.charAt(i));
StringBuilder buf = new StringBuilder(str.length());
while (!queue.isEmpty())
buf.append(queue.remove());
return buf.toString();
}
如果你只有字母,你可以不使用特殊的结构:
public static String sortIgnoreCase(String str) {
int[] lowerCase = new int[26];
int[] upperCase = new int[lowerCase.length];
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (Character.isLowerCase(ch))
lowerCase[ch - 'a']++;
else if (Character.isUpperCase(ch))
upperCase[ch - 'A']++;
}
char[] res = new char[str.length()];
for (int i = 0, j = 0; i < lowerCase.length; i++) {
for (int k = 0; k < upperCase[i]; k++)
res[j++] = (char)(i + 'A');
for (int k = 0; k < lowerCase[i]; k++)
res[j++] = (char)(i + 'a');
}
return new String(res);
}
最后,使用您的方法,您可以使用insertionsort
:
public static String sortIgnoreCase(String str) {
char[] arr = str.toCharArray();
for (int i = 0; i < str.length(); i++) {
for (int j = i; j >= 1; j--) {
int res = Integer.compare(Character.toLowerCase(arr[j - 1]),
Character.toLowerCase(arr[j]));
if (res == 0 && arr[j - 1] < arr[j] || res < 0)
break;
swap(arr, j - 1, j);
}
}
return new String(arr);
}
private static void swap(char[] arr, int i, int j) {
char tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
问题内容: 我一直在寻找一种不用使用collections.sort就可以对数组列表进行排序的方法,因为我自己的逻辑有缺陷,而且我遇到了很多麻烦。 我需要对它进行排序,以便可以使用我创建的一种方法,该方法基本上可以执行collections.swap的工作,以便对数组列表进行完全排序。 这是我的代码: 我对此一直很烦恼。抱歉,这是在伤害社区。 问题答案: 我想,你希望下面的算法:在阵列的其余部分发
问题内容: 我正在寻找Python中忽略大小写字符串的比较。 我尝试过: 但忽略案例没有成功。我需要在给定的文本文件中找到一组单词。我正在逐行读取文件。一行上的单词可以是 mandy , Mandy , MANDY 等(我不想使用/等)。 我正在寻找下面的Perl代码的Python等效项。 问题答案: 如果您不想使用,则可以使用正则表达式:
问题内容: 我尝试使用 OrderBy 从Cloud Firestore读取排序的数据。然后Firestore按照以下顺序返回数据: AAA BBB aaa bbb 现在,我想要的是以下内容: AAA AAA BBB BBB 我只希望使用 OrderBy 而不通过手动排序获得此结果。 在Firestore中,有什么方法可以排序? 请为此提供解决方案。 提前致谢。 问题答案: Cloud Fires
问题内容: 为每个对象提供一种方法,因此给一个类似 一个人可以像 如果传递给的字符串与现有值不匹配(区分大小写),则将引发an 。 要进行不区分大小写的匹配,可以在枚举内编写自定义方法,例如 假设方法是在编译时隐式添加到类中,是否有任何通用方法可以不编写值或任何其他额外对象的缓存,而只编写一次上述方法(例如,不是每个方法)? 这种“通用” 方法的签名将类似于该方法,即: 并且它将为任何对象完全实现
问题内容: 我正在尝试按升序对任意长度整数的数字进行排序,而不使用字符串,数组或递归。 例: 我已经弄清楚如何用模数除法获得整数的每个数字: 但是我不知道如何在没有数组的情况下排序数字。 不用担心上课;这是我们教授给我们的习俗课。 问题答案: 实际上有一个非常简单的算法,它 仅 使用 整数 : 它会打印出来。这个想法很简单: 您将要排序的数字作为当前数字(我们称其为N) 您可以浏览已排序数字中的所
我的问题是我的代码对结果区分大小写。 下面是我的代码: 我的问题是:如何对它进行不区分大小写的排序?