如何在字符串中每隔2个字母交换一次?-Java



所以我目前正在做一个个人项目,我制作了一个程序,试图交换给定字符串中的每2个字母。

所以我想要这样的输出:

(注意输入字符串是"abllte"(

ballet

所以我写了这个方法

public static String codeString(String input) {
String firstLetter = "";
String secoundLetter = "";
String result = "";
for(int i = 0; i < input.length()-1; i++){
for(int c = 0; c < i; c = c +2)
{  
firstLetter = input.substring(c,c + 1);
secoundLetter = input.substring(c + 1, c + 2); 

}
result = result + secoundLetter + firstLetter;
}
return result;
}

但我得到了这个输出:

ababllll

知道怎么解决这个问题吗?

提前谢谢!

您只需要一个循环。这适用于偶数和奇数长度的字符串。

  • 首先,使用的方法返回当前修改状态的StringBuilder
  • 所以sb.insert(i, sb.charAt(i+1))i+1i处插入char
  • 因此,如果sb包含ab,那么StringBuilder现在将包含bab
  • insert返回修改后的StringBuilder,所以现在sb.deleteCharAt(i+2)删除第二个a(刚刚复制的那个(
  • 然后重复此操作,直到交换完所有字符为止
  • 由于字符的不断插入和删除,这不是很有效
for (String s : new String[] { "abcdefg", "abcdefgh" }) {
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < sb.length() - 1; i += 2) {
sb.insert(i, sb.charAt(i + 1)).deleteCharAt(i + 2);
}
System.out.println(s + " -> " + sb);
}

打印

abcdefg -> badcfeg
abcdefgh -> badcfehg

对于一个更有效的算法,这将是前进的道路。它也更加直观。

for (String s : new String[] { "abcdefg", "abcdefgh" }) {
char ch[] = s.toCharArray();
for (int i = 0; i < ch.length - 1; i+=2) {
char c = ch[i];
ch[i] = ch[i + 1];
ch[i + 1] = c;
}
String d = String.valueOf(ch);

System.out.println(s + " -> " + d);
}

此打印与上面相同。

我不确定嵌套for循环的意义是什么。只需一个循环就可以做到这一点。

public static String codeString(String input) {
String firstLetter = "";
String secoundLetter = "";
String result = "";
for(int i = 0; i < input.length()-1; i+=2){
firstLetter = input.substring(i,i+1);
secoundLetter = input.substring(i+1,i+2);
result = result + secoundLetter + firstLetter;
}
return result;
}

如果输入字符串的字符数为奇数,则必须附加额外的最后一个字符。

public static String codeString(String input) {
String firstLetter = "";
String secoundLetter = "";
String result = "";
for(int i = 0; i < input.length()-1; i+=2){
firstLetter = input.substring(i, i+1);
secoundLetter = input.substring(i+1, i+2);
result = result + secoundLetter + firstLetter;
}
if(input.length() % 2 == 1)
result += input.substring(input.length()-1, input.length());
return result;
}

您不需要嵌套循环。将外循环更改为以2为步长,即i = i + 2,并移除内循环。

public class Main {
public static void main(String[] args) {
System.out.println(codeString("abllte"));
}
public static String codeString(String input) {
String firstLetter = "";
String secondLetter = "";
String result = "";
for (int i = 0; i < input.length() - 1; i = i + 2) {
firstLetter = input.substring(i, i + 1);
secondLetter = input.substring(i + 1, i + 2);
result = result + secondLetter + firstLetter;
}
return result;
}
}

输出:

ballet

另一种方法:

您可以创建一个具有两个参数的函数:input字符串作为第一个参数,n作为第二个参数,其中input字符串中的每个n字符都需要反转。

public class Main {
public static void main(String[] args) {
System.out.println(codeString("abllte", 1));
System.out.println(codeString("abllte", 2));
System.out.println(codeString("abllte", 3));
System.out.println(codeString("abllte", 4));
}
public static String codeString(String input, int n) {
if (n <= input.length() / 2) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < input.length() - n + 1; i = i + n) {
result.append(new StringBuilder(input.substring(i, i + n)).reverse());
}
return result.toString();
} else {
return input;
}
}
}

输出:

abllte
ballet
lbaetl
abllte

最新更新