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