16

すべての大文字が小文字になり、すべての小文字が大文字になるように String を変更したいと考えています。数字は単に無視されます。

したがって、「AbCdE123」は「aBcDe123」になります。

文字列を反復処理して各文字を反転する方法、またはそれを実行できる正規表現が必要だと思います。

4

9 に答える 9

24

Apache Commons StringUtils にはswapCaseメソッドがあります。

于 2009-11-13T15:10:04.847 に答える
22

これを行うための組み込み機能はないと思います (比較的珍しいことです)。ただし、これでうまくいくはずです:

public static String reverseCase(String text)
{
    char[] chars = text.toCharArray();
    for (int i = 0; i < chars.length; i++)
    {
        char c = chars[i];
        if (Character.isUpperCase(c))
        {
            chars[i] = Character.toLowerCase(c);
        }
        else if (Character.isLowerCase(c))
        {
            chars[i] = Character.toUpperCase(c);
        }
    }
    return new String(chars);
}

これは、String.toUpperCase/String.toLowerCase が行うロケール固有の変更を行わないことに注意してください。また、BMP 以外の文字も処理しません。

于 2009-11-13T15:12:39.823 に答える
2

文字列を反復処理して各文字を反転する方法が必要だと思います

正しい。java.lang.Characterクラスは、そのための各メソッドを提供しますisUpperCase()。それをテストし、結果に応じてtoLowerCase()またはメソッドを使用します。toUpperCase()それぞれの結果を a に追加StringBuilderすれば問題ありません。

于 2009-11-13T15:12:38.383 に答える
2

Faraz のアプローチに基づいて、文字変換は次のように簡単にできると思います。

t += Character.isUpperCase(c) ? Character.toLowerCase(c) : Character.toUpperCase(c);
于 2016-04-27T22:09:10.640 に答える
-1

指定されたスレッドが非常に古いことは認識していますが、それを解決するより良い方法があります。

class Toggle
{ 
    public static void main()
    { 
        String str = "This is a String";
        String t = "";
        for (int x = 0; x < str.length(); x++)
        {  
            char c = str.charAt(x);
            boolean check = Character.isUpperCase(c);
            if (check == true)
                t = t + Character.toLowerCase(c);
            else
                t = t + Character.toUpperCase(c);
        }
        System.out.println (t);
    }
}
于 2015-01-27T17:32:02.923 に答える