欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

  看起來好像很簡單,只需要把字符串先分割成單詞,然后加入一個(gè)StringBuilder或者StringBuffer中,最后再使用toString方法即可,現(xiàn)在來實(shí)現(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;//計(jì)算數(shù)組長度
    StringBuilder sb = new StringBuilder(src.length());//新建一個(gè)StringBuilder對象
    for (int i=length-1;i>=1;i--){
        sb.append(arr[i]+" ");//將字符串依次加入StringBuilder中
    }
    sb.append(arr[0]);//最后一個(gè)單詞不加空格
    System.out.println(sb.toString());//輸出
  }
}

China Hello Java Hello

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

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

  那就只能一個(gè)字符一個(gè)字符判斷了,用charAt()來判斷字符是否為逗號句號或者引號,空格,如果是的話就知道到了分隔點(diǎn)了,如果不是的話就加入一個(gè)臨時(shí)的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);//定義一個(gè)StringBuilder對象
    StringBuilder goal = new StringBuilder(src.length());//定義一個(gè)StringBuilder對象來存放最終要輸出的信息
    char c;//定義一個(gè)字符變量
    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中還有內(nèi)容,在添加到goal中
    }
    System.out.println(goal.toString());//輸出
  }
}

  輸出如下:

.China Hello,Java Hello

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

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

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

  我們先隨機(jī)生成一個(gè)字符串,然后再使用第二種方式進(jìn)行處理:

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

    //開始計(jì)算時(shí)間
    time = System.currentTimeMillis();
    StringBuilder tmp = new StringBuilder(20);//定義一個(gè)StringBuilder對象存放臨時(shí)數(shù)據(jù)
    StringBuilder goal = new StringBuilder(sb.length());//定義一個(gè)StringBuilder對象來存放最終要輸出的信息
    char c;//定義一個(gè)字符變量
    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中還有內(nèi)容,在添加到goal中
    }
    System.out.println(System.currentTimeMillis()-time);//輸出運(yùn)行時(shí)間
  }
}

  輸出如下:

字符串長度:78888890
608

  608毫秒,速度還ok,生成字符串還是要花挺多時(shí)間的,因?yàn)橐恢币M(jìn)行內(nèi)存復(fù)制,如果在循環(huán)次數(shù)后再加一個(gè)0,就會內(nèi)存不足了。。。。

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)

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

相關(guān)文章

  • SpringBoot配置攔截器方式實(shí)例代碼

    SpringBoot配置攔截器方式實(shí)例代碼

    在本篇文章里小編給大家分享的是關(guān)于SpringBoot配置攔截器方式實(shí)例代碼,有需要的朋友們可以參考下。
    2020-04-04
  • 解決maven啟動Spring項(xiàng)目報(bào)錯的問題

    解決maven啟動Spring項(xiàng)目報(bào)錯的問題

    下面小編就為大家分享一篇解決maven啟動Spring項(xiàng)目報(bào)錯的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • SpringBoot之logback-spring.xml不生效的解決方法

    SpringBoot之logback-spring.xml不生效的解決方法

    這篇文章主要介紹了SpringBoot之logback-spring.xml不生效的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • JAVA--HashMap熱門面試題

    JAVA--HashMap熱門面試題

    這篇文章主要介紹了JAVA關(guān)于HashMap容易被提問的面試題,文中題目提問頻率高,相信對你的面試有一定幫助,想要入職JAVA的朋友可以了解下
    2020-06-06
  • java提取json中某個(gè)數(shù)組的所有值方法

    java提取json中某個(gè)數(shù)組的所有值方法

    下面小編就為大家分享一篇java提取json中某個(gè)數(shù)組的所有值方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Java設(shè)計(jì)模式之創(chuàng)建者模式詳解

    Java設(shè)計(jì)模式之創(chuàng)建者模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之創(chuàng)建者模式詳解,創(chuàng)建者模式,顧名思義,就是提供友好的創(chuàng)建對象的方式?,對象都是?new?出來的,但是在一些情況下,這種方式不是很友好,首先,它不夠直觀,需要的朋友可以參考下
    2023-08-08
  • Java的關(guān)鍵字與標(biāo)識符小結(jié)

    Java的關(guān)鍵字與標(biāo)識符小結(jié)

    這篇文章主要介紹了Java的關(guān)鍵字與標(biāo)識符,總結(jié)整理了Java各種常見的關(guān)鍵字與標(biāo)識符功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • springboot+webmagic實(shí)現(xiàn)java爬蟲jdbc及mysql的方法

    springboot+webmagic實(shí)現(xiàn)java爬蟲jdbc及mysql的方法

    今天小編就為大家分享一篇springboot+webmagic實(shí)現(xiàn)java爬蟲jdbc及mysql的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Java中Object類常用的12個(gè)方法(小結(jié))

    Java中Object類常用的12個(gè)方法(小結(jié))

    Java 中的 Object 方法在面試中是一個(gè)非常高頻的點(diǎn),本文主要介紹了Java中Object類常用的12個(gè)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Spring中的事務(wù)控制知識總結(jié)

    Spring中的事務(wù)控制知識總結(jié)

    我們講了轉(zhuǎn)賬方法存在著事務(wù)問題,當(dāng)在業(yè)務(wù)層方法更新轉(zhuǎn)入賬戶時(shí)發(fā)現(xiàn)異常,更新收款方賬戶則會出錯.當(dāng)時(shí)是通過自定義事務(wù)管理器進(jìn)行整體事務(wù)的處理.其實(shí)Spring 提供了業(yè)務(wù)層的事務(wù)處理解決方案,并且 Spring 的事務(wù)控制都是基于 AOP 的,需要的朋友可以參考下
    2021-06-06

最新評論