【JAVA】单词反转

博客介绍了单词反转和单词间反转的思路。单词反转通过 str.split(\ \) 以空格分割实现;单词间反转需确定左边界(空,下一个不为空)和右边界(不为空,下一个为空)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值