1.单词反转 思路:str.split(" ");以空格分割
package com.tulun.src5;
import java.util.Arrays;
/**
* “i am a student” String[]
* "student a am i"
*/
public class TestDemo {
public static String reverseString(String str){
String[] arr = str.split(" ");
for(int i=0;i<arr.length/2;i++){
String temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
String s = "";
for(int i=0;i<arr.length;i++){
s = s + arr[i]+" ";
}
return s;
}
public static void main(String[] args) {
String str = "i am a student";
reverseString(str);//student a ma i
System.out.println(str);
// student a am i
}
}
2.单词间反转 思路:左边界:空,下一个不为空
右边界:不为空,下一个为空
package com.tulun.src5;
import java.util.Arrays;
/**
* “i am a student” String[]
* "student a am i"
*/
public class TestDemo {
public static void reverseString(String str){
if(str == null)
return;
char[] ch = str.toCharArray();
//1. 全部逆置
for(int i=0;i<ch.length/2;i++){
char temp = ch[i];
ch[i] = ch[ch.length-1-i];
ch[ch.length-1-i] = temp;
}
//2 每一个单词字母间逆序
int left = 0,right = 0;
//
int i = left;
while(i < ch.length) {
//找右边界
while (i < ch.length-1) { // student
if (ch[i] != ' ' && ch[i + 1] == ' ') {
//i 下标 就是右边界
right = i;
break;
} else {
i++;
}
}
if(i == ch.length-1){
right = i;
}
//左,右边界单词逆转
for (int j = left; j < (left + right+1) / 2; j++) {
char temp = ch[j];// 10 11
ch[j] = ch[right - j+left];
ch[right - j+left] = temp;
}
//新的左边界
i = right+1;
while(i<ch.length){
if(ch[i-1] == ' ' && ch[i] != ' '){
left = i;
break;
}else{
i++;
}
}
}
System.out.println(Arrays.toString(ch));
}
public static void main(String[] args) {
String str = "i am a student";
reverseString(str);//student a ma i
System.out.println(str);
// student a am
}
}