zoukankan      html  css  js  c++  java
  • API 字符串的操作

    1 下列说法正确的是:

    A.在Java语言中,使用new关键字创建的字符串缓存在常量池中。

    B.在Java语言中,可以使用直接量“字符序列”的方式创建字符串。

    C.在Java语言中,对于使用new关键字创建的字符串序列,如果重复出现,JVM会首先在常量池中查找,如果存在即返回该对象。

    D.下列代码的输出结果为false

    1. String str1 = "WhatisJava";
    2. String str2 = "WhatisJava";
    3. System.out.println(str1 == str2);

    参考答案

    本题正确答案为B。

    Java语言中可以使用直接量“字符序列”的方式创建字符串,代码如下所示:

    1. String str = “WhatisJava”

    出于性能的考虑,JVM会将字符串直接量对象缓存在常量池中;对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象。请看下列代码:

     
    1. String str1 = "WhatisJava";
    2. String str2 = "WhatisJava";
    3. System.out.println(str1 == str2);

    以上代码的输出结果为true,第二次定义的“WhatisJava”不会重复创建String对象,而是使用str1所指向的对象。如果是使用new关键字创建的字符串,则不会缓存在常量池中,代码如下所示:

     
    1. String str1 = "WhatisJava";
    2. String str3 = new String("WhatisJava");
    3. System.out.println(str1 == str3);

    以上代码的输出结果为false,使用new关键字将会创建新的String对象。

    2 下面关于字符串长度说法正确的是:

    A.使用Java中的String类的length方法计算字符串的长度,如果是英文算1个长度,如果是中文算2个长度。

    B.使用Java中的String类的length方法计算字符串的长度,由于Java采用Unicode编码任何一个字符在内存中算2个长度 ,因此,length方法中也是一个字符2个长度,不区分中文还是英文。

    C.使用Java中的String类的length方法计算字符串的长度,无论中文还是英文都算1个长度。

    D.使用Java中的String类的length方法计算字符串"你好String"的长度为10。

    参考答案

    本题正确答案为C。

    使用Java中的String类的length方法计算字符串的长度,无论中文还是英文都算1个长度。另外,在Java中,字符在内存里采用的是Unicode编码,每个字符占用两个字节,请注意区别。

    3 获取一个字符串中最后一个"/"后的字符序列

    获取一个字符串中最后一个"/"后的字符序列,即,现有字符串“someapp/manager/emplist.action”,截取该字符串最后一个“/”后的所有字符,截取后的结果为字符串“emplist.action”。

    在课上案例“将其他类型转换为字符串类型”的基础上完成当前案例。

    参考答案

    首先,使用String类的lastIndexOf方法获取字符串“someapp/manager/emplist.action”中最后一个“/”的索引位置;然后在该索引位置的基础上加1,形成新的索引位置;最后,使用String类的substring方法,从新的索引位置开始截取到字符串的末尾,即为字符串“emplist.action”。

    实现此案例需要按照如下步骤进行。

    步骤一:重构TestString类,添加getPath方法

    在课上案例“将其他类型转换为字符串类型”的基础上,在TestString类中添加getPath方法,代码如下所示:

     
    1. package day01;
    2. import org.junit.Test;
    3. public class TestString {
    4.     //...(之前案例的代码,略)
    5.     /**
    6.      * 获取一个字符串中最后一个"/"后的字符序列
    7.      */
    8.     @Test
    9.     public void getPath() {
    10.     }
    11. }

    步骤二:使用String类的lastIndexOf方法和substring方法

    首先,使用String类的lastIndexOf方法获取字符串“someapp/manager/emplist.action”中最后一个“/”的索引位置;然后在该索引位置的基础上加1,形成新的索引位置;最后,使用String类的substring方法,从新的索引位置开始截取到字符串的末尾,即为字符串“emplist.action”,代码如下所示:

     
    1. package day01;
    2. import org.junit.Test;
    3. public class TestString {
    4.     //...(之前案例的代码,略)
    5.     /**
    6.      * 获取一个字符串中最后一个"/"后的字符序列
    7.      */
    8.     @Test
    9.     public void getPath() {
    10.         String uri = "someapp/manager/emplist.action";
    11.         String path = uri.substring(uri.lastIndexOf("/") + 1);
    12.         System.out.println(path); // emplist.action
    13.     }
    14. }

    步骤三:运行

    运行getPath方法,控制台输出结果如下所示:

    1. emplist.action

    从输出结果可以看出,与预期结果相符。

    本案例中,TestString类的完整代码如下所示:

     
    1. package day01;
    2. import org.junit.Test;
    3. public class TestString {
    4.     //...(之前案例的代码,略)
    5.     /**
    6.      * 获取一个字符串中最后一个"/"后的字符序列
    7.      */
    8.     @Test
    9.     public void getPath() {
    10.         String uri = "someapp/manager/emplist.action";
    11.         String path = uri.substring(uri.lastIndexOf("/") + 1);
    12.         System.out.println(path); // emplist.action
    13.     }
    14. }
     

    4 说出trim方法一般用在何处

    参考答案

    trim方法一般用于去除用户输入信息中的前后空白以及处理文件内容时,去除文件中的空白。

    5 检测一个字符串是否为回文

    回文字符串是指正着读和反着读该字符串都是相同拼写,比如“radar”、“level“。

    本案例要求编写程序判断字符串“able was i ere i saw elba”是否为回文。

    在课后案例“获取一个字符串中最后一个"/"后的字符序列”的基础上完成当前案例。

    参考答案

    首先,使用循环,在循环中,使用String类的charAt方法获取i位置的字符与(str.length() - i – 1)位置的字符是否相等,如果有一对不等的情况,则说明不是回文。循环的代码如下所示:

     
    1. for (int i = 0; i < str.length() / 2; i++) {
    2.             if (str.charAt(i) != str.charAt(str.length() - i - 1)) {
    3.                 flag = false;
    4.                 break;
    5.             }
    6.         }

    实现此案例需要按照如下步骤进行。

    步骤一:重构TestString类,添加palindrome方法

    在课后案例“获取一个字符串中最后一个"/"后的字符序列”的基础上,在TestString类中添加palindrome方法,代码如下所示:

     
    1. package day01;
    2. import org.junit.Test;
    3. public class TestString {
    4.     //...(之前案例的代码,略)
    5.     /**
    6.      * 检测一个字符串是否为回文
    7.      */
    8.     @Test
    9.     public void palindrome() {
    10.     }
    11. }

    步骤二:使用String类的charAt方法

    使用循环,在循环中,使用String类的charAt方法获取i位置的字符与(str.length() - i – 1)位置的字符是否相等,如果有一对不等的情况,则说明不是回文,代码如下所示:

     
    1. package day01;
    2. import org.junit.Test;
    3. public class TestString {
    4.     //...(之前案例的代码,略)
    5.     /**
    6.      * 检测一个字符串是否为回文
    7.      */
    8.     @Test
    9.     public void palindrome() {
    10.         String str = "able was i ere i saw elba";
    11.         boolean flag = true;
    12.         for (int i = 0; i < str.length() / 2; i++) {
    13.             if (str.charAt(i) != str.charAt(str.length() - i - 1)) {
    14.                 flag = false;
    15.                 break;
    16.             }
    17.         }
    18.         if (flag) {
    19.             System.out.println("是回文");
    20.         } else {
    21.             System.out.println("不是回文");
    22.         }
    23.     }
    24. }

    步骤三:运行

    运行palindrome方法,控制台输出结果如下所示:

    1. 是回文

    从输出结果可以看出,字符串"able was i ere i saw elba"为回文。

    本案例中,TestString类的完整代码如下所示:

     
    1. package day01;
    2. import org.junit.Test;
    3. public class TestString {
    4.     //...(之前案例的代码,略)
    5.     /**
    6.      * 检测一个字符串是否为回文
    7.      */
    8.     @Test
    9.     public void palindrome() {
    10.         String str = "able was i ere i saw elba";
    11.         boolean flag = true;
    12.         for (int i = 0; i < str.length() / 2; i++) {
    13.             if (str.charAt(i) != str.charAt(str.length() - i - 1)) {
    14.                 flag = false;
    15.                 break;
    16.             }
    17.         }
    18.         if (flag) {
    19.             System.out.println("是回文");
    20.         } else {
    21.             System.out.println("不是回文");
    22.         }
    23.     }
    24. }
     

    6 生成一个包含所有汉字的字符串

    生成一个包含所有汉字的字符串,即,编写程序输出所有汉字,每生成50个汉字进行换行输出。

    在课上案例“测试StringBuilder的delete方法“的基础上完成当前案例。

    参考答案

    在Java中,字符类型事实上是一个16位无符号整数,这个值对应字符的编码, Java字符类型采用Unicode字符集编码。Unicode是世界通用的定长字符集,所有的字符都是16位。字符直接量可以采用诸如:‘中’的形式,也可以采用16进制的表示形式,例如: ‘u4e2d’。所有汉字的Unicode范围是U+4E00~U+9FA5。

    本案例中,首先,使用循环,以Unicode汉字编码U+4E00作为循环的开始,以汉字编码U+9FA5作为循环的结束;然后,在循环中,使用StringBuilder的append方法进行字符串累加,并且计算生成的汉字个数,进行换行,代码如下所示:

     
    1. for (char c = 'u4e00', i = 1; c <= 'u9fa5'; c++, i++) {
    2.             sb.append(c);
    3.             if (i % 50 == 0) {
    4.                 sb.append(" ");
    5.             }
    6.         }

    实现此案例需要按照如下步骤进行。

    步骤一:在类中添加测试方法

    在TestStringBuilder类中添加测试方法chineseCharacters,代码如下所示:

     
    1. package day01;
    2. import org.junit.Test;
    3. public class TestStringBuilder {
    4.     /**
    5.      * 生成一个包含所有汉字的字符串
    6.      */
    7.     @Test
    8.     public void chineseCharacters() {
    9.         
    10.     }
    11. }

    步骤二:使用StringBuilder的append方法

    首先,使用循环,以Unicode汉字编码U+4E00作为循环的开始,以汉字编码U+9FA5作为循环的结束;然后,在循环中,使用StringBuilder的append方法进行字符串累加,并且计算生成的汉字个数,进行换行,代码如下所示:

     
    1. package day01;
    2. import org.junit.Test;
    3. public class TestStringBuilder {
    4.     /**
    5.      * 生成一个包含所有汉字的字符串
    6.      */
    7.     @Test
    8.     public void chineseCharacters() {
    9.         StringBuilder sb = new StringBuilder();
    10.         // “U+4E00..U+9FA5
    11.         for (char c = 'u4e00', i = 1; c <= 'u9fa5'; c++, i++) {
    12.             sb.append(c);
    13.             if (i % 50 == 0) {
    14.                 sb.append(" ");
    15.             }
    16.         }
    17.         System.out.println(sb.length());
    18.         System.out.println(sb.toString());
    19.     }
    20. }

    步骤三:运行

    运行chineseCharacters方法,控制台为输出结果的部分内容如图-1所示。

    图- 1

    本案例中,TestStringBuilder的完整代码如下所示:

     
    1. package day01;
    2. import org.junit.Test;
    3. public class TestStringBuilder {
    4.     //...(之前案例的代码,略)
    5.     
    6.     /**
    7.      * 生成一个包含所有汉字的字符串
    8.      */
    9.     @Test
    10.     public void chineseCharacters() {
    11.         StringBuilder sb = new StringBuilder();
    12.         // “U+4E00..U+9FA5
    13.         for (char c = 'u4e00', i = 1; c <= 'u9fa5'; c++, i++) {
    14.             sb.append(c);
    15.             if (i % 50 == 0) {
    16.                 sb.append(" ");
    17.             }
    18.         }
    19.         System.out.println(sb.length());
    20.         System.out.println(sb.toString());
    21.     }
    22. }
     

    7 阅读Apache Commons-lang.jar中StringUtils文档,掌握leftPad、rightPad、repeat、abbreviate、join等方法(提高题,选做)

    参考答案

    commons-lang是Apache Commons 项目中的一个组件,commons-lang针对JDK官方的java.lang包中的类提供了一些实用的补充,在实践中应用很广。

    StringUtils是commons-lang包中提供的,针对字符串操作的工具类,该类提供了一系列静态实用方法,如表-1所示:

    表-1 StringUtil类中方法介绍

    下面给出以上几个方法的测试代码,请自行进行测试,代码如下所示:

     
    1. package day01;
    2. import org.apache.commons.lang3.StringUtils;
    3. import org.junit.Test;
    4. public class TestStringUtils {
    5.     @Test
    6.     public void testLeftPadAndRightPad() {
    7.         String name = StringUtils.leftPad("goodman", 10, "*");
    8.         System.out.println(name);
    9.         name = StringUtils.rightPad("goodman", 10, "*");
    10.         System.out.println(name);
    11.     }
    12.     @Test
    13.     public void testRepeat() {
    14.         String str = "Java";
    15.         str = StringUtils.repeat(str, 10);
    16.         System.out.println(str);
    17.     }
    18.     @Test
    19.     public void testAbbreviate() {
    20.         String line = "How long no see you";
    21.         line = StringUtils.abbreviate(line, 15);
    22.         System.out.println(line);
    23.     }
    24.     @Test
    25.     public void testJoin() {
    26.         String[] strArr = { "Java", "C++", "C#", "PHP", "Objective-C" };
    27.         String str = StringUtils.join(strArr, " ");
    28.         System.out.println(str);
    29.     }
    30. }
  • 相关阅读:
    玩转spring boot——结合JPA事务
    玩转spring boot——结合AngularJs和JDBC
    玩转spring boot——结合jQuery和AngularJs
    028_Mac急救箱快捷键
    006_身体部位名词
    005_Philippines之行准备
    027_MacOs上如何将多页word打印到一个页面上
    026_PPT知识汇总
    025_Excel知识汇总
    024_Word知识汇总
  • 原文地址:https://www.cnblogs.com/xyk1987/p/8330920.html
Copyright © 2011-2022 走看看