最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)單詞倒序輸出

 更新時間:2020年08月19日 10:07:49   作者:弗蘭克的貓  
這篇文章主要介紹了Java實現(xiàn)單詞倒序輸出,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下

  如何將一段單詞倒序輸出?把“Hello Java Hello China”變成“China Hello Java Hello”?

  看起來好像很簡單,只需要把字符串先分割成單詞,然后加入一個StringBuilder或者StringBuffer中,最后再使用toString方法即可,現(xiàn)在來實現(xiàn)一下:

/**
 * @author Frank
 * @create 2017/11/24
 * @description
 */
public class Test {
  public static void main(String[] args) {
    String src = "Hello Java Hello China";//需要處理的字符串
    String[] arr = src.split(" ");//按空格分割
    int length = arr.length;//計算數(shù)組長度
    StringBuilder sb = new StringBuilder(src.length());//新建一個StringBuilder對象
    for (int i=length-1;i>=1;i--){
        sb.append(arr[i]+" ");//將字符串依次加入StringBuilder中
    }
    sb.append(arr[0]);//最后一個單詞不加空格
    System.out.println(sb.toString());//輸出
  }
}

China Hello Java Hello

  好的,現(xiàn)在就完美的解決了問題。

  但事實上,通常并不是全用空格分隔開來的,而是有逗號,句號,引號等,那么這該如何處理呢?

  那就只能一個字符一個字符判斷了,用charAt()來判斷字符是否為逗號句號或者引號,空格,如果是的話就知道到了分隔點了,如果不是的話就加入一個臨時的StringBuilder對象,代碼如下:

/**
 * @author Frank
 * @create 2017/11/24
 * @description
 */
public class Test2 {
  public static void main(String[] args) {
    String src = "Hello Java,Hello China.";//需要處理的字符串
    StringBuilder tmp = new StringBuilder(20);//定義一個StringBuilder對象
    StringBuilder goal = new StringBuilder(src.length());//定義一個StringBuilder對象來存放最終要輸出的信息
    char c;//定義一個字符變量
    for (int i=src.length()-1;i>=0;i--){
      c = src.charAt(i);//從后往前取字符
      if(c ==' ' || c == ',' || c == '.'){//判斷是否為分隔字符
        goal.append(tmp);//如果是的話就把tmp加入到goal中來
        goal.append(c);//在把分隔字符也一起加入
        tmp.delete(0,tmp.length());//清空tmp
      }else {
        tmp.insert(0,c);//如果不是分隔字符,說明單詞未完整,繼續(xù)加入tmp中
      }
    }
    if (!tmp.equals("")){
      goal.append(tmp);//如果tmp中還有內容,在添加到goal中
    }
    System.out.println(goal.toString());//輸出
  }
}

  輸出如下:

.China Hello,Java Hello

  好像沒什么問題了?! ?/p>

  現(xiàn)在難度進一步升級,如果有一個20M的字符串,“Hello_,_China_..._Bye.”(...代表中間省略的部分),單詞之間用空格隔開,現(xiàn)在需要把所有單詞全部顛倒順序,要求效率不能太低。不看這個20M的話,好像沒什么難度,關鍵就在于這個20M,肯定不能像第一種方式用split分割,那樣的話會創(chuàng)建一個很大的字符串數(shù)組,浪費很多空間。

  所以這里采用第二種方式。

  我們先隨機生成一個字符串,然后再使用第二種方式進行處理:

/**
 * @author Frank
 * @create 2017/11/24
 * @description
 */
public class Test3 {
  public static void main(String[] args) {
    long time = 0;
    StringBuilder sb = new StringBuilder();
    //先生成一個比較大的字符串
    for (int i=0;i<10000000;i++){
      sb.append(i+" ");
    }
    System.out.println("字符串長度:"+sb.length());

    //開始計算時間
    time = System.currentTimeMillis();
    StringBuilder tmp = new StringBuilder(20);//定義一個StringBuilder對象存放臨時數(shù)據(jù)
    StringBuilder goal = new StringBuilder(sb.length());//定義一個StringBuilder對象來存放最終要輸出的信息
    char c;//定義一個字符變量
    for (int i=sb.length()-1;i>=0;i--){
      c = sb.charAt(i);//從后往前取字符
      if(c ==' '){//判斷是否為分隔字符
        goal.append(tmp);//如果是的話就把tmp加入到goal中來
        goal.append(c);//在把分隔字符也一起加入
        tmp.delete(0,tmp.length());//清空tmp
      }else {
        tmp.insert(0,c);//如果不是分隔字符,說明單詞未完整,繼續(xù)加入tmp中
      }
    }
    if (!tmp.equals("")){
      goal.append(tmp);//如果tmp中還有內容,在添加到goal中
    }
    System.out.println(System.currentTimeMillis()-time);//輸出運行時間
  }
}

  輸出如下:

字符串長度:78888890
608

  608毫秒,速度還ok,生成字符串還是要花挺多時間的,因為一直要進行內存復制,如果在循環(huán)次數(shù)后再加一個0,就會內存不足了。。。。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3332)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at com.frank.string.test1.Test3.main(Test3.java:14)

  至此,本篇問題討論完畢,如果有更好更快的方法,歡迎留言交流討論。

相關文章

  • Java中String類常用方法詳細匯總

    Java中String類常用方法詳細匯總

    Java中String類在所有項目開發(fā)里面一定會用到,因此String類提供了一系列的功能操作方法,下面這篇文章主要給大家介紹了關于Java中String類常用方法的相關資料,需要的朋友可以參考下
    2023-05-05
  • java替換url的域名和端口方法

    java替換url的域名和端口方法

    下面小編就為大家?guī)硪黄猨ava替換url的域名和端口方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Springboot啟動停止命令的.sh腳本編寫方式

    Springboot啟動停止命令的.sh腳本編寫方式

    這篇文章主要介紹了Springboot啟動停止命令的.sh腳本編寫方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 通過Java帶你了解網(wǎng)絡IO模型

    通過Java帶你了解網(wǎng)絡IO模型

    這篇文章將通過Java帶大家了解網(wǎng)絡IO模型,包括BIO,NoBlockingIO,NIO(NewIO),AIO等做了詳細得介紹,感興趣的小伙伴可以參考閱讀本文
    2023-05-05
  • SpringBoot多線程進行異步請求的處理方式

    SpringBoot多線程進行異步請求的處理方式

    這篇文章主要介紹了SpringBoot多線程進行異步請求的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜
    2021-12-12
  • java IP地址網(wǎng)段計算的示例代碼

    java IP地址網(wǎng)段計算的示例代碼

    這篇文章主要介紹了java IP地址網(wǎng)段計算的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Mybatis中SQL的執(zhí)行過程詳解

    Mybatis中SQL的執(zhí)行過程詳解

    MyBatis框架通過映射文件或注解將Java代碼中的方法與數(shù)據(jù)庫操作進行映射,執(zhí)行過程包括SQL解析、參數(shù)綁定、SQL預編譯、執(zhí)行、結果映射、事務處理、緩存處理和日志記錄
    2024-12-12
  • SpringBoot整合Mybatis實現(xiàn)CRUD

    SpringBoot整合Mybatis實現(xiàn)CRUD

    這篇文章主要介紹了SpringBoot整合Mybatis實現(xiàn)CRUD的相關知識,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Java實現(xiàn)樹形結構的示例代碼

    Java實現(xiàn)樹形結構的示例代碼

    由于業(yè)務需要,后端需要返回一個樹型結構給前端,包含父子節(jié)點的數(shù)據(jù)已經(jīng)在數(shù)據(jù)庫中存儲好。本文將為大家分享Java現(xiàn)樹形結構的示例代碼,需要的可以參考下
    2022-05-05
  • mybatis使用foreach踩坑及解決

    mybatis使用foreach踩坑及解決

    這篇文章主要介紹了mybatis使用foreach踩坑及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

嵩明县| 武宁县| 尼勒克县| 专栏| 南溪县| 晋中市| 沅陵县| 舟山市| 博白县| 维西| 印江| 乌苏市| 海兴县| 西青区| 密山市| 兴宁市| 丰都县| 常宁市| 孟津县| 宜阳县| 哈尔滨市| 原平市| 嘉义市| 彭水| 安乡县| 蛟河市| 博乐市| 大悟县| 房山区| 桂林市| 安阳县| 庆阳市| 子长县| 昌乐县| 时尚| 镇平县| 苏州市| 北流市| 彰武县| 黔江区| 中宁县|