我有代码可以将小写字母更改为大写字母,反之亦然。比我写的更快的方法是什么?
public static String flipcase(String text) {
ArrayList<Character> arry2 = new ArrayList<Character>();
char[] array = text.toCharArray();
char x = ' ';
char y = ' ';
for (int i = 0; i <array.length; i++) {
if (Character.isLowerCase(array[i])) {
x = Character.toUpperCase(array[i]);
arry2.add(x);
} else if (Character.isUpperCase(array[i])){
y = Character.toLowerCase(array[i]);
arry2.add(y);
} else if (Character.isSpace(array[i])) {
arry2.add(array[i]);
}
}
StringBuilder result = new StringBuilder(arry2.size());
for (Character c : arry2) {
result.append(c);
}
String output = result.toString();
return output;
}
public static void main(String[] args) {
System.out.println(flipcase("To jest Ten FLIP Case"));
}
最佳答案
我认为你的代码会很慢有两个原因:
- 您将更改后的字母放入
List
中:这必然意味着您将char
装箱到Character
中,这如果您要做很多事情,就需要时间。 - 您将更改的字母放入列表中,然后将它们复制到
StringBuilder
中。您可以简单地将它们直接放入StringBuilder
中。
但我想说,直接在 array
中操作并在最后使用 new String(array)
会更快。
char[] array = text.toCharArray();
int j = 0;
for (int i = 0; i <array.length; i++) {
if (Character.isLowerCase(array[i])) {
array[j++] = Character.toUpperCase(array[i]);
} else if (Character.isUpperCase(array[i])) {
array[j++] = Character.toLowerCase(array[i]);
} else if (Character.isSpace(array[i])) {
array[j++] = array[i];
}
}
return new String(array, 0, j);
toCharArray()
返回支持字符串的 char 数组的副本,因此您可以随意修改它。
这基本上就是StringBuilder
正在做的事情;它只是少了一层“层”。
关于java - 更改给定字符串中字母的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43902006/