输入一个英文句子,反转句子中各单词顺序,但单词内字符的顺序不变。

一、输入一个英文句子,反转句子中各单词顺序,但单词内字符的顺序不变

例如:输入“i am a student”,输出"student a am i"。

思路:1.将整个字符串倒置
2.以空格为界,倒置字符

//交换字符
public static void swap(char[]arr,int begin,int end){
    char temp;
    while(end>begin){
        temp=arr[begin];
        arr[begin]=arr[end];
        arr[end]=temp;
        end--;
        begin++;
    }
}
    
//功能实现
public static String changeOrder(String str){
    char[] ch=str.toCharArray();   //将字符串转成字符数组
    //System.out.println(Arrays.toString(ch));
    char temp;
    int begin=0,end=0;
    int i=0;
    int srcLen=ch.length;
    //转换整个字符串
    swap(ch,i,srcLen-1);

    //以空格为单位,转换空格前后字符顺序 使单词正序
    for(int j=0;j<srcLen;j++){  
        if(ch[j]!=' '){
            begin=j;
            while(ch[j]!=' '&& (j+1)<srcLen){   //为保证不越界
                j++;
            }
            if(j==srcLen-1){
                end=srcLen-1;
            }else {
                end=j-1;
            }
        }
        swap(ch,begin,end);
    }
    String string=String.copyValueOf(ch);   //字符数组生成字符串
    return string;
}

运行结果:
在这里插入图片描述
另一种情况:当str为“student”时:
在这里插入图片描述

二、将指定字符换成任意字符

例如:将字符串“I am a student”中“a”,换成3个“$”

public static int getCount(char[] ch,char arc){    //统计要改的字符数
    int count=0;
    for(int i=0;i<ch.length;i++){
        if(ch[i]==arc){
            count++;
        }
    }
    return count;
}

public static String replace(String str,char src,int num,char aim){
    char[] ch=str.toCharArray();    //将字符串对象中的字符转换为一个字符数组:ch=str
    int srcLen=ch.length;
    int count = getCount(ch,src);
    ch= Arrays.copyOf(ch,ch.length+count*(num-1));   //将数组一次性扩容为能容纳修改后字符的大小
    int i=srcLen-1;   //遍历原数组大小
    int j=ch.length-1;  //遍历新数组大小
    while(i!=j){
        if(ch[i]!=src){
            ch[j--]=ch[i--];
        }else{
            for(int z=0;z<num;z++){
                ch[j--]=aim;
            }
            i--;
        }
    }
    String string =String.copyValueOf(ch);   //字符数组生成字符串
    return string;
}
三、将字符串从左数第n个开始进行旋转

例如:String str = “abcdef”;从第2个开始旋转,旋转后的结果为: ”cdefab”

public static String rotateString(String str,int n){  //n表示从第几位开始左旋
    char[] ch=str.toCharArray();
    swap(ch,0,n-1);
    swap(ch,n,str.length()-1);
    swap(ch,0,str.length()-1);
    String string =String.copyValueOf(ch);   //字符数组生成字符串
    return string;
}
  • 功能测试
public static void main(String[] args) {
    String str=changeOrder("i am a student");    //i am a student
    System.out.println("以单词为界 反转字符串结果为:"+str);
    String string=replace("I am a student",'a',3,'$');
    System.out.println("更改指定字符结果为:"+string);
    String s=rotateString("abcdefg",3);
    System.out.println("左旋字符串结果为:"+s);
}
  • 运行结果:
    在这里插入图片描述
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值