0

私はこの問題で2時間立ち往生しています。基本的に、文字列を逆にする必要があります(これは問題ありませんでした)。次に、n番目の文字ごとに交換します(これが行き詰まった場所です)。

これが私がこれまでに持っているものです:

    public class StringMethods {


        public static void main(String[] args) {
            String s = "Hey there";
            int n = 2;

            System.out.println(reverseString(s));
            System.out.println(reverseStringChallenge(s, n));

        }

        private static String reverseString(String s) {
            String reversed = "";
            for (int i = s.length() - 1; i >= 0; i--) {
                reversed = reversed + s.charAt(i);
            }
            return reversed;
        }


        private static String reverseStringChallenge(String s, int n) {
            String reversed = "";
            String swapped = "";
            for (int i = s.length() - 1; i >= 0; i--) {
                reversed = reversed + s.charAt(i); // normal reverse
                }

            char [] charArray = reversed.toCharArray();  //Strings are immutable, convert string to char array

            for(int i = 0; i < charArray.length; i++) {
                if(i%n == 0) {  
                                //this is where im stuck
                }

            }


            return swapped;
        }

}

文字列はJavaで不変であることを知っているので、反転した文字列をchar配列に変換してから配列をループする必要がありますが、ここで何をすべきかわかりません。

アドバイスをいただければ幸いです。それは私の頭をやっています。

編集:申し訳ありませんが、n番目の文字ごとにスワップするということは、n = 2と言うことです。その後、2番目の文字ごとに前の文字と交換されます。

4

3 に答える 3

0

現在の文字を次の文字と交換する場合は、次のようにすることができます。

private static String reverseStringChallenge(String s, int n) 
{

String reversed = StringUitls.reverse(s); 
StringBuilder sb = new StringBuilder();
char [] charArray = reversed.toCharArray(); 

for(int i = 0; i < charArray.length; i++) {
 if(i%n == 0)
 {
   sb.append(charArray[i+1]).append(charArray[i]);
   i++;
 }else{
   sb.append(charArray[i]);
 }
}
return sb.toString();
}

私はすみませんnullであり、範囲外のチェックです=)幸運を祈ります

于 2013-10-17T05:27:03.220 に答える