编写一个方法,将一段文本中的各个单词的字母顺序翻转题
編寫一個方法,將一段文本中的各個單詞的字母順序翻轉題
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碼為32i =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.運行效果如下:
初次寫博客,請多多指教
總結
以上是生活随笔為你收集整理的编写一个方法,将一段文本中的各个单词的字母顺序翻转题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 例说游戏角色设计与角色文化内涵的关系
- 下一篇: 旅人随笔[02] 量子物理的故事