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

时间:2017-05-10 20:18:42

标签: java arraylist uppercase lowercase

我有代码将小写后置改为大写,反过来。我写的是什么更快的方式呢?

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 个答案:

答案 0 :(得分:2)

我说你的代码会很慢的原因有两个:

  1. 您将更改过的字母放入List:这必然意味着您将char装入Character s,如果您做了很多事情,这需要时间他们。
  2. 您将更改的字母放入列表中,然后将其复制到StringBuilder。您可以直接将它们直接放入StringBuilder
  3. 但我要说直接在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正在做的事情;它只是少了一层“层”。