编写一个方法,将一段文本中的各个单词的字母顺序翻转题

编写一个方法,将一段文本中的各个单词的字母顺序翻转题

1.任务介绍

编写一个方法,将一段文本中的各个单词的字母顺序翻转, 例如:“I like writing code best”,将变成"I ekil gnitirw edoc tseb"。

2.思路

① 通过空格将字符串进行切割,保存为字符串类型的数组。
注意:第一个字符或者最后一个字符为空时,造成切割份数不符合规律,这里再遍历时跳过这两个字符,不影响储存字符串;
② 将存储分割后字符串数组,通过遍历,将每段字符串进行翻转,存入新的字符串数组;
注意:这里可以使用StringBuilder或者StringBuffer的append方法对反转后的字符串进行拼接,而初学的我使用了浪费内存的直接字符串拼接,这样会造成字符串常量池大量字符串占用内存无法回收,不推荐使用;

3.用到的类及方法

(1)String类

①用到的构造方法

·String()// 返回String类型,初始化为空字符序列;
·String(char[] value)// 返回String类型,包含字符数组中的参数序列;

②用到的方法

(1)indexOf(int ch,fromIndex);indexOf(String str, int fromIndex)
返回类型:int
说明:从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引;
注意:形参int ch表示要查找字符对应的ASCII码值,例如要查找空格第一次常出现的位置:int index = str.indexOf(32);fromIndex为可选参数,指查找的开始下标;
(2)substring​(int beginIndex, int endIndex)
返回类型:String;
说明:两个下标之间截取的字符串;
注意:返回的字符串包含beginIndex对应的字符,不包含endIndex,我因为这个找了挺久bug,这种左闭右开的逻辑有丝熟悉的味道;
(3)getChars​(int srcBegin, int srcEnd, char[] dst, int dstBegin)
这个本来是用不到的,但是作为初学,为及时了解到substring方法,在这个任务中,我用了这个方法作为替代,用起来比较麻烦;
返回类型:void
说明:将一段字符序列存储到字符类型的数组中

(2) StringBuilder类

① 用到的构造方法

StringBuilder()//构造一个字符串构建器,其中不包含任何字符,初始容量为16个字符。
StringBuilder(String str)//构造一个初始化为指定字符串内容的字符串构建器。

② 用到的方法

(1)append(String str);
这个任务里我是用的是直接加字符串,但是推荐使用append
返回类型:StringBuilder;
说明:将字符串str拼接到目标对象的字符串中
(2)reverse()
返回类型:StringBuilder
说明:使此字符串序列翻转

4.代码如下

import java.util.Scanner;

public class StringTaskOne {

    // 任务1:个单词字母顺序反转
    public static void main(String[] args) {
        // 创建界面和数据处理对象
        UserInput user = new UserInput();
        ValueDeal deal = new ValueDeal();

        // 欢迎界面
        user.welcome();
        // 用户输入
        String value = user.inputValue();
        // 获取空格数量
        int count = deal.spaceCount(value);
        // 存储拆分后的单词
        String[] valueSplit = deal.splitStr(count,value);
        // 获取处理后的反转语句
        String valueReverse = deal.reverseValue(valueSplit);
        // 输出反转后的语句
        user.outValue(valueReverse);
        // 结束程序
        user.end();
    }

}

// 界面类,为了方便观看,而且代码量较少,这里不再建class文件
class UserInput{
    // 属性,用户输入
    private Scanner input = new Scanner(System.in);

    // 构造方法一:无参构造法
    UserInput(){};

    // 方法一:欢迎界面
    public void welcome(){
        System.out.println("=====程序已启动,感谢您的使用=====");
    }

    // 方法一:返回用户输入值
    public String inputValue(){
        // 提示用户输入
        System.out.println("请输入要反转的语句");
        // 返回用户输入语句
        return input.nextLine();
    }

    // 方法二:显示处理后的语句
    public void outValue(String str){
        // 输出接收到的字符串
        System.out.println("反转后的语句为:"+str);
    }

    // 方法三:结束提示
    public void end(){
        System.out.println("本次服务到此结束-_-");
    }
}

// 数据处理类
class ValueDeal{
    // 属性

    //构造方法一:空构造方法
    ValueDeal(){};

    // 方法一:获取输入的语句空格数量
    public int spaceCount(String str){
        // 存储已找到空格数量
        int number = 0;
        // 通过indexOf查找空格,为了防止首字符和尾字符是空格,从1小标开找,最大下标减一结束
        for(int i = 1;i < str.length()-1;i++){
            // 空格的ASCII码为32
            i =str.indexOf(32,i);
            if(i == -1){
                // 等于-1,说明已经不存在空格,返回即可
                return number;
            }else{
                // 找到后空格数量记加一
                number++;
            }
        }
        // 下面语句不需要,但是不加语法通不过
        return number;
    }

    // 方法二,根据空格数量,将字符串拆分成单词
    public String[] splitStr(int count,String string){
        // 存储上一空格下标位置,第一个空格(假设)相当于在第一个元素之前
        int a1 = -1;
        // 存储拆分出的字符
        char[] ch;
        // 存储拆分后的语句,count个空格将语句分为空格+1份
        String[] str = new String[count+1];
       for(int i = 1;i<string.length()-1;i++){
           // 定义字符长度
           i = string.indexOf(32,i);
           // 如果i为-1,跳出
           if(i == -1){
               break;
           }
           ch = new char[i - a1 - 1];
           // 赋值
           string.getChars(a1+1,i,ch,0);
           //存储至数组
           str[str.length-count-1] = new String(ch);
           // 空格数减一
           count--;
           a1 = i;

       }
       // 将尾部字符串存入
        ch = new char[string.length()-1 - a1];
       string.getChars(a1+1,string.length(),ch,0);
       str[str.length-1] = new String(ch);
       // 返回处理后的数组
        return str;
    }

    // 方法三:将处理后的数组转换为反转语句
    public String reverseValue(String[] str){
        // 存储字符串的变量
        String string = ""+new StringBuilder(str[0]).reverse();
        // 通过遍历将语句拼接
        for(int i = 1;i < str.length;i++){
            string = string + " "+new StringBuilder(str[i]).reverse();
        }
        return string;
    }

}

5.运行效果如下:

在这里插入图片描述

在这里插入图片描述

初次写博客,请多多指教

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值