输入一个英文单词顺序,反转句子中单词的顺序,但单词内字符的顺序不变。 为简单起见,标点符号和普通字母一样处理,例如输入“i am a student”,输出“student a am i“。*

第一种方法:

package CL6;

/**
 * @author: 贾兴伟
 * @date: Created in 9:10 2020/9/22
 */
import java.util.Scanner;
public class reserve2 {
    
    
    public static void swap(String[] arr,int i ,int j){
    
    
        String a ="";
        a= arr[i];
        arr[i] = arr[j];
        arr[j] = a;
    }
    public static void main(String[] args) {
    
    
        String str = "i am a student";
        String[] arr = str.split(" ");
        int i =0;
        int j =arr.length-1;
        while(i<j){
    
    
            swap(arr,i,j);
            i++;
            j--;
        }
        String str1 = "";
        for(i=0;i<arr.length;i++){
    
    
            str1+=arr[i];
            str1+=" ";
        }
        System.out.println(str1);
    }
}

第二种:

package CL6;

/**
 * @author: 贾兴伟
 * @date: Created in 15:27 2020/9/22
 */
import java.util.Scanner;
public class reserve3 {
    
    
    public static void swap(char[] arr,int i ,int j){
    
    
        char a ;
        a= arr[i];
        arr[i] = arr[j];
        arr[j] = a;
    }
    public static void resev(char[] arr,int i,int j){
    
    
        while(i<j){
    
    
            swap(arr,i,j);
            i++;
            j--;
        }
    }
    public static String finanResev(char[] arr){
    
    
        int a =0;
        int b =0;
        for(int i =0;i<arr.length;i++){
    
    
            if(arr[i]==' '){
    
    
                a = i-1;
                resev(arr,b,a);
                b = a + 2;
            }
            if(i==arr.length-1){
    
    
                a = i;
                resev(arr,b,a);
            }
        }
        return new String(arr);
    }
    public static void main(String[] args) {
    
    
        System.out.println("请输入一句话");
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        char[] arr = str.toCharArray();
        int i =0;
        int j =arr.length-1;
        resev(arr,i,j);
        System.out.println(finanResev(arr));
    }
}

第三种:

package CL6;

/**
 * @author: 贾兴伟
 * @date: Created in 18:33 2020/9/20
 */
import java.util.Scanner;
public class reserve {
    
    
    public static String reverse(String word){
    
    
        //toCharArray() 方法将字符串转换为字符数组
        char[] arr = word.toCharArray();
        char[] brr = new char[arr.length];
        int count = 0;
        for(int i=arr.length-1;i>=0;i--){
    
    
            if(arr[i]==' '){
    
       //倒叙查找,找到一个空格之后 从空格的下一个坐标开始复制给brr数组
                for(int n = i+1;n<arr.length;n++){
    
    
                    brr[count++]= arr[n];
                    if(n == arr.length-1)
                        brr[count++] = ' ';//对于最后一个单词,输出完成之后要手动添加一个空格
                    if(arr[n]==' ') //复制到下一个空格之后 跳出循环查找下一个单词
                        break;
                }
            } else if (i == 0){
    
    
                for(int n = i;n<arr.length;n++){
    
    
                    if(arr[n]==' ')
                        break;    //注意这里的if条件不能写在 brr[count++]= arr[n];之后,
                    // 因为这里已经是第一个单,空格不能输出,否则brr会越界
                    brr[count++]= arr[n];
                    /*if(arr[n]==' ')
                        break;*/
                }
            }
        }
        return new String(brr);
    }
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入英文语句:");
        String word = sc.nextLine();
        System.out.println(reverse(word));
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_47198561/article/details/109496746
今日推荐