如何交换字符串中的每 2 个字母? - Java
How to swap every 2 letters in a String? - 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
知道如何解决这个问题吗?
提前致谢!
我不确定你的嵌套 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
你只需要一个循环。这适用于偶数和奇数长度的字符串。
- 首先,方法使用了 return
StringBuilder
的当前修改状态。
- 所以
sb.insert(i, sb.charAt(i+1))
在 i+1
处插入字符 i
- 所以如果
sb
包含 ab
,StringBuilder
现在将包含 bab
- 插入 returns 修改后的
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);
}
这与上面的打印相同。
所以我目前正在做一个个人项目,我制作了一个程序,试图交换给定字符串中的每 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
知道如何解决这个问题吗?
提前致谢!
我不确定你的嵌套 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
你只需要一个循环。这适用于偶数和奇数长度的字符串。
- 首先,方法使用了 return
StringBuilder
的当前修改状态。 - 所以
sb.insert(i, sb.charAt(i+1))
在i+1
处插入字符i
- 所以如果
sb
包含ab
,StringBuilder
现在将包含bab
- 插入 returns 修改后的
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);
}
这与上面的打印相同。