改变给定字符串中字母的大小

Changing size of letters in a given string

我有代码可以将小写字母更改为大写字母,反之亦然。比我写的更快的方法是什么?

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"));
}

我认为您的代码会很慢的原因有两个:

  1. 您将更改后的字母放入 List:这必然意味着您将 char 装箱到 Character,如果您这样做需要时间很多。
  2. 您正在将更改后的字母放入列表中,然后将它们复制到 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() returns 支持字符串的 char 数组的副本,因此您可以随意修改它。

这基本上就是StringBuilder所做的;它只是少了一个 "layer".