0

文字列トークンを見て、すべての文字が 1 つずつ移動するようにフォーマットするこのコードを作成しました。文字はすべて小文字で、a から z までです。

したがって、入力が
abcz
の場合、 出力は
bcdaです

今、すべてのアルファベットを配列リストに追加しました。コードは各文字のインデックスを決定し、それに 1 を追加します。z が見つかった場合は、arraylist のインデックスが範囲外にならないように a を出力します。

List<String> letters = new ArrayList<String>(); 
        String alp = "abcdefghijklmnopqrstuvwxyz";
        for (int i = 0; i<26; i++)
        {
            letters.add(Character.toString(alp.charAt(i)));
        }

        String token = sc.next();
        for (int i = 0; i<token.length(); i++)
        {
            if (letters.get(letters.indexOf(Character.toString(token.charAt(i)))).equals("z"))
            {
                System.out.print("a");
            }
            else
            {
            System.out.print(letters.get(letters.indexOf(Character.toString(token.charAt(i)))+1));
            }
        }
4

2 に答える 2

3

モジュラー演算を少し使った単純なループで十分ですが、なぜそんなに多くのオブジェクトを気にするのでしょうか?

for(int i = 0; i < token.length(); ++i) {
    System.out.print(('a' + (token.charAt(i) + 1 - 'a')%('z' - 'a' + 1)));
}

からのオフセットを 1 増やし、'a'26 を法とする剰余を取って、0 から 25 の範囲のオフセットを取得します。

于 2012-11-24T01:48:53.953 に答える
2

Apache commons-lang ライブラリには、StringUtils.replaceChars()これを実行できるユーティリティ メソッドがあります。

StringUtils.replaceChars(input, "abcdefghijklmnopqrstuvwxyz", "bcdefghijklmnopqrstuvwxyza");

このように大きなパラメータがありますが、少し見栄えが悪いです。

それにもかかわらず、それはたった 1 行であり、私見によれば、最良の種類のコードは他の誰かのコードです (つまり、それを実行するライブラリがあれば、それを使用する傾向があります)。

于 2012-11-24T01:58:14.040 に答える