gpt4 book ai didi

Java实现单词倒序输出

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Java实现单词倒序输出由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

  如何将一段单词倒序输出?把“Hello Java Hello China”变成“China Hello Java Hello”?

  看起来好像很简单,只需要把字符串先分割成单词,然后加入一个StringBuilder或者StringBuffer中,最后再使用toString方法即可,现在来实现一下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
  * @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; //计算数组长度
     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 。

  好的,现在就完美的解决了问题.

  但事实上,通常并不是全用空格分隔开来的,而是有逗号,句号,引号等,那么这该如何处理呢?

  那就只能一个字符一个字符判断了,用charAt()来判断字符是否为逗号句号或者引号,空格,如果是的话就知道到了分隔点了,如果不是的话就加入一个临时的StringBuilder对象,代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
  * @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); //如果不是分隔字符,说明单词未完整,继续加入tmp中
       }
     }
     if (!tmp.equals( "" )){
       goal.append(tmp); //如果tmp中还有内容,在添加到goal中
     }
     System.out.println(goal.toString()); //输出
   }
}

  输出如下:

.China Hello,Java Hello 。

  好像没什么问题了。   。

  现在难度进一步升级,如果有一个20M的字符串,“Hello_,_China_..._Bye.”(...代表中间省略的部分),单词之间用空格隔开,现在需要把所有单词全部颠倒顺序,要求效率不能太低。不看这个20M的话,好像没什么难度,关键就在于这个20M,肯定不能像第一种方式用split分割,那样的话会创建一个很大的字符串数组,浪费很多空间.

  所以这里采用第二种方式.

  我们先随机生成一个字符串,然后再使用第二种方式进行处理:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
  * @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对象存放临时数据
     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); //如果不是分隔字符,说明单词未完整,继续加入tmp中
       }
     }
     if (!tmp.equals( "" )){
       goal.append(tmp); //如果tmp中还有内容,在添加到goal中
     }
     System.out.println(System.currentTimeMillis()-time); //输出运行时间
   }
}

  输出如下:

字符串长度:78888890 608 。

  608毫秒,速度还ok,生成字符串还是要花挺多时间的,因为一直要进行内存复制,如果在循环次数后再加一个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) 。

  至此,本篇问题讨论完毕,如果有更好更快的方法,欢迎留言交流讨论.

原文链接:https://cloud.tencent.com/developer/article/1016618 。

最后此篇关于Java实现单词倒序输出的文章就讲到这里了,如果你想了解更多关于Java实现单词倒序输出的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com