java 交换最后一个和第一个字符串 - 问题适用于 3 但不适用于 4
java swap last and 1st strings - problem works for 3 but not for 4
下面的代码在数组中的字符串数为奇数 (3,5,7) 时有效,但在数字为偶数时无效。例如,如果我使用“我的名字”,我会得到输出
name is the name
public void randomTest() {
String str ="my is name";
//Step1: split so that I can get them in in array
String [] arrStr= str.split(" ");
for(int i=0;i<arrStr.length;i++){
//Step2: Using temp swap 1st and last
String temp = arrStr[0];
arrStr[0] = arrStr[arrStr.length-1];
arrStr[arrStr.length-1] = temp;
System.out.print(arrStr[i]+" ");
}
}
知道如何让它适用于偶数个字符串吗?谢谢。
您只需对数组长度的一半进行循环迭代,即
for (int i = 0; i < arrStr.length / 2; i++)
此外,您需要使用计数器变量 i
而不是固定值 0
和 1
。确保将索引限制在 0 to length_of_array - 1
范围内,这是 Java.
中数组的索引范围
按如下操作:
public class Main {
public static void main(String[] args) {
String str = "my is the name";
String[] arrStr = str.split(" ");
// Swap the elements of the array
for (int i = 0; i < arrStr.length / 2; i++) {
String temp = arrStr[i];
arrStr[i] = arrStr[arrStr.length - i - 1];
arrStr[arrStr.length - i - 1] = temp;
}
// Display the array
for (int i = 0; i < arrStr.length; i++) {
System.out.print(arrStr[i] + " ");
}
}
}
输出:
name the is my
如果只想交换第一个词和最后一个词,则不需要循环。你可以简单地这样:
public class Main {
public static void main(String[] args) {
String str = "my is the name";
String[] arrStr = str.split(" ");
// Swap the first and the last words
String temp = arrStr[0];
arrStr[0] = arrStr[arrStr.length - 1];
arrStr[arrStr.length - 1] = temp;
// Display the array
for (int i = 0; i < arrStr.length; i++) {
System.out.print(arrStr[i] + " ");
}
}
}
输出:
name is the my
由于Arvind Kumar Avinash分享了固定的解决方案,我只是想提供一个替代方案:将字符串拆分为String数组后,也许你可以简单地交换最后一个和第一个值,然后将它们连接在一起:
String str ="my is the name";
// split
String[] arrStr= str.split(" ");
// swap
String temp = arrStr[0];
arrStr[0] = arrStr[arrStr.length - 1];
arrStr[arrStr.length - 1] = temp;
// join them back
str = String.join(" ", arrStr);
System.out.println(str); // name is the my
您当前正在做的是交换第一个和最后一个元素 n
次,其中 n
是数组的大小。这使得当你有偶数个元素时,例如,2,然后你交换第一个和最后一个元素,然后将它们交换回它们的原始位置,这是未交换的。这也是为什么它适用于奇数个元素的原因,因为您将第一个和最后一个元素交换偶数次然后再交换一次。如果你只想交换第一个和最后一个元素,你可以简单地去掉你的 for
循环,它会正常工作。
public void randomTest() {
String str ="my is name";
//Step1: split so that I can get them in in array
String [] arrStr= str.split(" ");
//Step2: Using temp swap 1st and last
String temp = arrStr[0];
arrStr[0] = arrStr[arrStr.length-1];
arrStr[arrStr.length-1] = temp;
}
之后,如果要将字符串重新合并在一起,可以使用
str = String.join(" ", arrStr);
或像这样的 StringBuilder 对象。
StringBuilder sb = new StringBuilder(arrStr[0]);
for (int i = 0; i < arrStr.length; i++) {
sb.append(" ").append(arrStr[i]);
}
str = sb.toString();
其中任何一个的效果都会将 my name is foo
变成 foo name is my
,基本上是交换第一个和最后一个单词,并且适用于任何长度或单词数量的字符串。
最简单的方法是从句子中提取第一个和最后一个词。
int first = name.indexOf(' '); // first "space" character that occurs
int last = name.lastIndexOf(' '); // last "space" character that occurs
String firstWord = name.substring(0, first); // substring first word from index 0 to index of first "space" character
String lastWord = name.substring(last, name.length()-1); // substring last word from index the of last "space" character to higher index o sentence
String midSentece = name.substring(first, last); // substring rest of the sentence
System.out.println(lastWord + midSentece + firstWord);
下面的代码在数组中的字符串数为奇数 (3,5,7) 时有效,但在数字为偶数时无效。例如,如果我使用“我的名字”,我会得到输出
name is the name
public void randomTest() {
String str ="my is name";
//Step1: split so that I can get them in in array
String [] arrStr= str.split(" ");
for(int i=0;i<arrStr.length;i++){
//Step2: Using temp swap 1st and last
String temp = arrStr[0];
arrStr[0] = arrStr[arrStr.length-1];
arrStr[arrStr.length-1] = temp;
System.out.print(arrStr[i]+" ");
}
}
知道如何让它适用于偶数个字符串吗?谢谢。
您只需对数组长度的一半进行循环迭代,即
for (int i = 0; i < arrStr.length / 2; i++)
此外,您需要使用计数器变量 i
而不是固定值 0
和 1
。确保将索引限制在 0 to length_of_array - 1
范围内,这是 Java.
按如下操作:
public class Main {
public static void main(String[] args) {
String str = "my is the name";
String[] arrStr = str.split(" ");
// Swap the elements of the array
for (int i = 0; i < arrStr.length / 2; i++) {
String temp = arrStr[i];
arrStr[i] = arrStr[arrStr.length - i - 1];
arrStr[arrStr.length - i - 1] = temp;
}
// Display the array
for (int i = 0; i < arrStr.length; i++) {
System.out.print(arrStr[i] + " ");
}
}
}
输出:
name the is my
如果只想交换第一个词和最后一个词,则不需要循环。你可以简单地这样:
public class Main {
public static void main(String[] args) {
String str = "my is the name";
String[] arrStr = str.split(" ");
// Swap the first and the last words
String temp = arrStr[0];
arrStr[0] = arrStr[arrStr.length - 1];
arrStr[arrStr.length - 1] = temp;
// Display the array
for (int i = 0; i < arrStr.length; i++) {
System.out.print(arrStr[i] + " ");
}
}
}
输出:
name is the my
由于Arvind Kumar Avinash分享了固定的解决方案,我只是想提供一个替代方案:将字符串拆分为String数组后,也许你可以简单地交换最后一个和第一个值,然后将它们连接在一起:
String str ="my is the name";
// split
String[] arrStr= str.split(" ");
// swap
String temp = arrStr[0];
arrStr[0] = arrStr[arrStr.length - 1];
arrStr[arrStr.length - 1] = temp;
// join them back
str = String.join(" ", arrStr);
System.out.println(str); // name is the my
您当前正在做的是交换第一个和最后一个元素 n
次,其中 n
是数组的大小。这使得当你有偶数个元素时,例如,2,然后你交换第一个和最后一个元素,然后将它们交换回它们的原始位置,这是未交换的。这也是为什么它适用于奇数个元素的原因,因为您将第一个和最后一个元素交换偶数次然后再交换一次。如果你只想交换第一个和最后一个元素,你可以简单地去掉你的 for
循环,它会正常工作。
public void randomTest() {
String str ="my is name";
//Step1: split so that I can get them in in array
String [] arrStr= str.split(" ");
//Step2: Using temp swap 1st and last
String temp = arrStr[0];
arrStr[0] = arrStr[arrStr.length-1];
arrStr[arrStr.length-1] = temp;
}
之后,如果要将字符串重新合并在一起,可以使用
str = String.join(" ", arrStr);
或像这样的 StringBuilder 对象。
StringBuilder sb = new StringBuilder(arrStr[0]);
for (int i = 0; i < arrStr.length; i++) {
sb.append(" ").append(arrStr[i]);
}
str = sb.toString();
其中任何一个的效果都会将 my name is foo
变成 foo name is my
,基本上是交换第一个和最后一个单词,并且适用于任何长度或单词数量的字符串。
最简单的方法是从句子中提取第一个和最后一个词。
int first = name.indexOf(' '); // first "space" character that occurs
int last = name.lastIndexOf(' '); // last "space" character that occurs
String firstWord = name.substring(0, first); // substring first word from index 0 to index of first "space" character
String lastWord = name.substring(last, name.length()-1); // substring last word from index the of last "space" character to higher index o sentence
String midSentece = name.substring(first, last); // substring rest of the sentence
System.out.println(lastWord + midSentece + firstWord);