反转一个字符串然后交换每个第n个字母

时间:2013-10-17 05:05:12

标签: java string

我现在已经坚持这个问题两个小时了。基本上我需要反转一个字符串(我没有问题),然后交换每个第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.然后每隔一个字母与之前的字母交换。

3 个答案:

答案 0 :(得分:0)

你没有澄清交换逻辑,但是这样的事情如何:

for(int i = n; i < charArray.length; i += n) {
    char a = charArray[i-n];
    char b = charArray[n];
    charArray[i-n] = b;
    charArray[n] = a;
}

答案 1 :(得分:0)

这是一个基本的交换

int n = 1; 
int n1 = 2;

int temp = n;  // variable to hold n value
n = n2;    // make n = n2
n2 = temp; // make n2 = n

// now n = 2
// and n2 = 1

从您的问题中不确定您要做的是什么,所以我无法给出明确的答案

答案 2 :(得分: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并且出界检查=)祝你好运