编写一个方法,将一段文本中的各个单词的字母顺序翻转题
編寫一個(gè)方法,將一段文本中的各個(gè)單詞的字母順序翻轉(zhuǎn)題
1.任務(wù)介紹
編寫一個(gè)方法,將一段文本中的各個(gè)單詞的字母順序翻轉(zhuǎn), 例如:“I like writing code best”,將變成"I ekil gnitirw edoc tseb"。
2.思路
① 通過(guò)空格將字符串進(jìn)行切割,保存為字符串類型的數(shù)組。
注意:第一個(gè)字符或者最后一個(gè)字符為空時(shí),造成切割份數(shù)不符合規(guī)律,這里再遍歷時(shí)跳過(guò)這兩個(gè)字符,不影響儲(chǔ)存字符串;
② 將存儲(chǔ)分割后字符串?dāng)?shù)組,通過(guò)遍歷,將每段字符串進(jìn)行翻轉(zhuǎn),存入新的字符串?dāng)?shù)組;
注意:這里可以使用StringBuilder或者StringBuffer的append方法對(duì)反轉(zhuǎn)后的字符串進(jìn)行拼接,而初學(xué)的我使用了浪費(fèi)內(nèi)存的直接字符串拼接,這樣會(huì)造成字符串常量池大量字符串占用內(nèi)存無(wú)法回收,不推薦使用;
3.用到的類及方法
(1)String類
①用到的構(gòu)造方法
·String()// 返回String類型,初始化為空字符序列;
·String(char[] value)// 返回String類型,包含字符數(shù)組中的參數(shù)序列;
②用到的方法
(1)indexOf(int ch,fromIndex);indexOf(String str, int fromIndex)
返回類型:int
說(shuō)明:從指定的索引處開始,返回指定子字符串第一次出現(xiàn)的字符串中的索引;
注意:形參int ch表示要查找字符對(duì)應(yīng)的ASCII碼值,例如要查找空格第一次常出現(xiàn)的位置:int index = str.indexOf(32);fromIndex為可選參數(shù),指查找的開始下標(biāo);
(2)substring?(int beginIndex, int endIndex)
返回類型:String;
說(shuō)明:兩個(gè)下標(biāo)之間截取的字符串;
注意:返回的字符串包含beginIndex對(duì)應(yīng)的字符,不包含endIndex,我因?yàn)檫@個(gè)找了挺久bug,這種左閉右開的邏輯有絲熟悉的味道;
(3)getChars?(int srcBegin, int srcEnd, char[] dst, int dstBegin)
這個(gè)本來(lái)是用不到的,但是作為初學(xué),為及時(shí)了解到substring方法,在這個(gè)任務(wù)中,我用了這個(gè)方法作為替代,用起來(lái)比較麻煩;
返回類型:void
說(shuō)明:將一段字符序列存儲(chǔ)到字符類型的數(shù)組中
(2) StringBuilder類
① 用到的構(gòu)造方法
StringBuilder()//構(gòu)造一個(gè)字符串構(gòu)建器,其中不包含任何字符,初始容量為16個(gè)字符。
StringBuilder(String str)//構(gòu)造一個(gè)初始化為指定字符串內(nèi)容的字符串構(gòu)建器。
② 用到的方法
(1)append(String str);
這個(gè)任務(wù)里我是用的是直接加字符串,但是推薦使用append
返回類型:StringBuilder;
說(shuō)明:將字符串str拼接到目標(biāo)對(duì)象的字符串中
(2)reverse()
返回類型:StringBuilder
說(shuō)明:使此字符串序列翻轉(zhuǎn)
4.代碼如下
import java.util.Scanner;public class StringTaskOne {// 任務(wù)1:個(gè)單詞字母順序反轉(zhuǎn)public static void main(String[] args) {// 創(chuàng)建界面和數(shù)據(jù)處理對(duì)象UserInput user = new UserInput();ValueDeal deal = new ValueDeal();// 歡迎界面user.welcome();// 用戶輸入String value = user.inputValue();// 獲取空格數(shù)量int count = deal.spaceCount(value);// 存儲(chǔ)拆分后的單詞String[] valueSplit = deal.splitStr(count,value);// 獲取處理后的反轉(zhuǎn)語(yǔ)句String valueReverse = deal.reverseValue(valueSplit);// 輸出反轉(zhuǎn)后的語(yǔ)句user.outValue(valueReverse);// 結(jié)束程序user.end();}}// 界面類,為了方便觀看,而且代碼量較少,這里不再建class文件 class UserInput{// 屬性,用戶輸入private Scanner input = new Scanner(System.in);// 構(gòu)造方法一:無(wú)參構(gòu)造法UserInput(){};// 方法一:歡迎界面public void welcome(){System.out.println("=====程序已啟動(dòng),感謝您的使用=====");}// 方法一:返回用戶輸入值public String inputValue(){// 提示用戶輸入System.out.println("請(qǐng)輸入要反轉(zhuǎn)的語(yǔ)句");// 返回用戶輸入語(yǔ)句return input.nextLine();}// 方法二:顯示處理后的語(yǔ)句public void outValue(String str){// 輸出接收到的字符串System.out.println("反轉(zhuǎn)后的語(yǔ)句為:"+str);}// 方法三:結(jié)束提示public void end(){System.out.println("本次服務(wù)到此結(jié)束-_-");} }// 數(shù)據(jù)處理類 class ValueDeal{// 屬性//構(gòu)造方法一:空構(gòu)造方法ValueDeal(){};// 方法一:獲取輸入的語(yǔ)句空格數(shù)量public int spaceCount(String str){// 存儲(chǔ)已找到空格數(shù)量int number = 0;// 通過(guò)indexOf查找空格,為了防止首字符和尾字符是空格,從1小標(biāo)開找,最大下標(biāo)減一結(jié)束for(int i = 1;i < str.length()-1;i++){// 空格的ASCII碼為32i =str.indexOf(32,i);if(i == -1){// 等于-1,說(shuō)明已經(jīng)不存在空格,返回即可return number;}else{// 找到后空格數(shù)量記加一number++;}}// 下面語(yǔ)句不需要,但是不加語(yǔ)法通不過(guò)return number;}// 方法二,根據(jù)空格數(shù)量,將字符串拆分成單詞public String[] splitStr(int count,String string){// 存儲(chǔ)上一空格下標(biāo)位置,第一個(gè)空格(假設(shè))相當(dāng)于在第一個(gè)元素之前int a1 = -1;// 存儲(chǔ)拆分出的字符char[] ch;// 存儲(chǔ)拆分后的語(yǔ)句,count個(gè)空格將語(yǔ)句分為空格+1份String[] str = new String[count+1];for(int i = 1;i<string.length()-1;i++){// 定義字符長(zhǎng)度i = string.indexOf(32,i);// 如果i為-1,跳出if(i == -1){break;}ch = new char[i - a1 - 1];// 賦值string.getChars(a1+1,i,ch,0);//存儲(chǔ)至數(shù)組str[str.length-count-1] = new String(ch);// 空格數(shù)減一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);// 返回處理后的數(shù)組return str;}// 方法三:將處理后的數(shù)組轉(zhuǎn)換為反轉(zhuǎn)語(yǔ)句public String reverseValue(String[] str){// 存儲(chǔ)字符串的變量String string = ""+new StringBuilder(str[0]).reverse();// 通過(guò)遍歷將語(yǔ)句拼接for(int i = 1;i < str.length;i++){string = string + " "+new StringBuilder(str[i]).reverse();}return string;}}5.運(yùn)行效果如下:
初次寫博客,請(qǐng)多多指教
總結(jié)
以上是生活随笔為你收集整理的编写一个方法,将一段文本中的各个单词的字母顺序翻转题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 例说游戏角色设计与角色文化内涵的关系
- 下一篇: 旅人随笔[02] 量子物理的故事