6

大文字のすべての文字を(コマンドライン入力から)小文字に変換する短いプログラムを作成しようとしています。

以下はコンパイルされますが、期待した結果が得られません。この理由は何でしょう??

例) java toLowerCase BANaNa -> バナナを出力する

 public class toLowerCase{
        public static void main(String[] args){

            toLowerCase(args[0]);
        }

        public static void toLowerCase(String a){

            for (int i = 0; i< a.length(); i++){

                char aChar = a.charAt(i);
                if (65 <= aChar && aChar<=90){
                    aChar = (char)( (aChar + 32) ); 
                }

                System.out.print(a);
            }
         }   
    }
4

10 に答える 10

8

String aを変更せずに印刷しています。次のように、ループ内で char を直接出力できます。

public class toLowerCase
{
    public static void main(String[] args)
    {
        toLowerCase(args[0]);
    }

    public static void toLowerCase(String a)
    {
        for (int i = 0; i< a.length(); i++)
        {
            char aChar = a.charAt(i);
            if (65 <= aChar && aChar<=90)
            {
                aChar = (char)( (aChar + 32) ); 
            }
            System.out.print(aChar);
         }
     }
}    
于 2013-04-28T03:28:44.423 に答える
2

このコードをよりきれいに書く方法は次のとおりです。

public static void printLowerCase(String a){
    for(char ch: a.toCharArray()) {
       if(ch >= 'A' && ch <= 'Z')
          ch += 'a' - 'A';
       System.out.print(ch);
    }
}

注: これは、他の範囲の大文字では機能しません。(1,000台あります)

于 2013-04-28T06:47:10.027 に答える
2

私には宿題のように見えますが、ヒントです。タイプaを変更しているときに文字列を出力していますが、元の文字列は変更していません。(文字列は不変であることを忘れないでください)。charaChara

于 2013-04-28T03:23:49.147 に答える
1
public static void toLowerCase(String a){

    String newStr = "";

    for (int i = 0; i< a.length(); i++){

        char aChar = a.charAt(i);
        if (65 <= aChar && aChar<=90){
            aChar = (char)( (aChar + 32) ); 
        }
        newStr = newStr + aChar;    
    }
    System.out.println(newStr);
}

newStrfor ループの外側に出力する必要があります。ループ内で印刷しようとしていました

于 2013-04-28T03:28:26.367 に答える
1

近くにいるようです。:)

手始めに...

char aChar = a.charAt(i);

「a」は文字列の配列なので、各要素を反復したいと思うでしょう

char aChar = a[i].charAt(0);

また、最初に変数に渡された「a」ではなく、変更された変数の値を返したいようです。

System.out.print(aChar);

いいえ

System.out.print(a);

お役に立てば幸いです。

于 2013-04-28T03:31:20.767 に答える
0

誰かが MagicNumbers を使用せずに明確なコードを必要とし、可能な限り変換を少なくする必要がある場合は、私の解決策を次に示します。

final char[] charArray = new char[string.length()];
for (int i = 0; i < string.length(); i++) {
    char c = string.charAt(i);
    charArray[i] = Character.isLowerCase(c) ? Character.toUpperCase(c) : Character.toLowerCase(c);
}
String.valueOf(charArray);
于 2018-01-15T12:23:10.637 に答える