程序员面试笔试通关宝典
上QQ阅读APP看书,第一时间看更新

3.1 字符串

本节主要讲解Java中的字符串的创建、基本操作、类型转换以及字符串在实际操作中的应用等问题。应聘者只有能够理解问题的要求,掌握这些基础知识并且能够做到举一反三,才能在面试及笔试中应对自如。

3.1.1 String类

String类的本质就是字符数组,String类是Java中的文本数据类型。字符串是由字母、数字、汉字以及下画线组成的一串字符。字符串常量是用双引号表示的内容。String类是Java中比较特殊的一类,但它不是Java的基本数据类型之一,却可以像其他基本数据类型一样使用,声明与初始化等操作都是相同的,是程序经常处理的对象,因此掌握好String的用法对我们后面的学习会有所帮助。

3.1.2 字符串的创建

String类的创建有两种方式:一种是直接使用双引号赋值;另一种是使用new关键字创建对象。

1.直接创建

直接使用双引号为字符串常量赋值,语法格式如下:

    String 字符串名 ="字符串";

字符串名:一个合法的标识符。

字符串:由字符组成。

例如:

    String s = "hello java";
2.使用new关键字创建

在Java中有多种重载的构造方法,通常使用new关键字调用String类的构造方法来创建字符串。

1)public String()方法

这种方法初始化一个新创建的String类对象,使它表示一个空字符序列。由于String是不可改变的,因此这种创建方法我们几乎不使用。

使用String()方法创建空字符串的代码如下:

    String s = new String();

注意使用String类创建的空字符串,它的值不是null,而是“ ”,它是实例化的字符串对象,不包括任何字符。

2)public String(String original)方法

该方法初始化一个新创建的String类对象,使其表示一个与参数相同的字符序列,即创建该参数字符串的副本。由于String类是不可变的,因此这种构建方法一般不常用,除非需要显示original的副本。

使用一个带String类型参数的构造函数创建字符串,具体代码如下:

    String s = new String("hello");

3)public String(char[] value)方法

该方法分配一个新的String类对象,使其表示字符数组参数中当前包括的字符序列。该字符数组的内容已经被复制,后续对字符数组的修改不会影响新创建的字符串。字符数组value的值是字符串的初始值。

使用一个带char类型数组参数的构造函数创建字符串,具体代码如下:

    char a[] = {'h','e','l','l','o'};
    String s = new String(a);

4)public String(char[],value,int,offset,count)方法

该方法是分配一个新的String类对象,它包含字符数组参数的一个子数组的字符。offset参数是子数组第一个字符的索引,count参数指定子数组的长度。该子数组的内容已经被复制,后续对字符数组的修改不会影响新创建的字符串。

使用带有3个参数的构造函数创建字符数组,具体代码如下:

    char[] a= {'s','t','u','d','e','n','t'};
    String s = new String(a, 2, 4);
    a [3]='u',

3.1.3 字符串的连接

连接字符串是字符串操作中最简单的一种。通过连接字符串,可以将两个或多个字符串、字符、整数和浮点数等类型的数据连成一个更大的字符串。字符串的连接有两种方法,一种是使用“+”,另一种是使用String提供的concat()方法。

1.使用“+”连接字符串

“+”运算符是最简单、快捷,也是使用最多的字符串连接方式。在使用“+”运算符连接字符串和int型(或double型)数据时,“+”将int(或double)型数据自动转换成String类型。

下面的实例使用“+”运算符连接了3个数组和1个字符串。

上述代码首先创建了3个包含5个元素的数组,然后循环遍历数组,遍历的次数为5。在循环体内输出学号、姓名和课程,并使用“+”运算符连接班级,最终形成一个字符串。程序运行后输出结果如下:

    本次考试学生信息如下:
    学号:51|姓名:张宁|课程:数学|班级:九年级
    学号:11|姓名:刘丽|课程:语文|班级:九年级
    学号:24|姓名:李旺|课程:数学|班级:九年级
    学号:12|姓名:孟霞|课程:英语|班级:九年级
    学号:34|姓名:贺一|课程:英语|班级:九年级

注意当定义的字符串值的长度过长时,可以分多行来写,这样比较容易阅读。

2.使用concat()方法

在Java中,String类的concat()方法实现了将一个字符串连接到另一个字符串后面的方法。concat()方法语法格式如下:

    字符串1 concat (字符串2);

执行结果是字符串2被连接到字符串1的后面,形成新的字符串。

concat()方法一次只能连接两个字符串,如果需要连接多个字符串,需要多次调用concat()方法。

下面创建一个实例代码来演示如何使用concat()方法连接多个字符串。

    public static void main (String [] args)
    {
        String info="python";
        info=info.concat("java、");
        info=info.concat("c、");
        info=info.concat("html");
        System.out.println(info);
        String cn="中国";
        System.out.println(cn.concat("河南").concat("郑州").concat("聚慕课"));
    }

执行该段代码,输出的结果如下:

    python、java、c、html
    中国河南郑州聚慕课

3.1.4 字符串的基本操作

在程序中我们经常对字符串进行一些基本的操作,接下来将从以下几个方面介绍字符串的基本操作。

1.String基本操作方法

1)获取字符串长度方法length()

    int length=str.length();

2)获取字符串中的第i个字符方法charAt(i)

    char ch = str.charAt(i);  //i为字符串的索引号,可得到字符串任意位置处的字符,保存到字符变量中

3)获取指定位置的字符方法getChars(4个参数)

    char array[] = new char[80];  //先要创建一个容量足够大的char型数组,数组名为array
    str.getChars(indexBegin,indexEnd,array,arrayBegin);
2.字符串比较

字符串比较也是常见的操作,包括比较大小、比较相等、比较前缀和后缀等。

1)比较大小

    compare to (String)
    compare to IgnoreCase(String)
    compare to (object String)

该示例通过使用上面的函数比较两个字符串,并返回一个int类型的数据。若字符串等于参数字符串则返回值为0;若字符串小于参数字符串则返回值小于0;若字符串大于参数字符串则返回值大于0。

2)比较相等

    String a=new String("abc");
    String b=new String("abc");
    a.equals(b);

如果两个字符串相等则返回的结果为true,否则返回的结果为false。

3)比较前缀和后缀

startsWith()方法测试字符串是否以指定的前缀开始,endsWith()方法测试字符串是否以指定的后缀结束。具体代码如下:

    public boolean startsWith (String prefix)
    public boolean endsWith (String suffix)

在上述代码中,boolean为返回值类型;prefix为指定的前缀;suffix为指定的后缀。

3.字符串的查找

有时候需要在一段很长的字符串中查找其中一部分字符串或者某个字符,String类恰恰提供了相应的查找方法。字符串查找分为两类:查找字符串和查找单个字符。查找又可分为查找对象在字符串中第一次出现的位置和最后一次出现的位置。

1)查找字符出现的位置

(1)indexOf()方法

    str.indexOf(ch);
    str.indexOf(ch,fromIndex); //包含fromIndex位置

返回指定字符在字符串中第一次出现位置的索引;返回指定索引位置之前第一次出现该字符的索引号。

(2)lastIndexOf()方法

    str.lastIndexOf(ch);
    str.lastIndexOf(ch,fromIndex);

返回指定字符在字符串中最后一次出现位置的索引;返回指定索引位置之前最后一次出现该字符的索引号。

2)查找字符串出现的位置

(1)indexOf()方法

    str.indexOf(str);
    str.indexOf(str,fromIndex);

返回指定子字符串在字符串中第一次出现位置的索引;返回指定索引位置之前第一次出现该子字符串的索引号。

(2)lastIndexOf()方法

    str.lastIndexOf(str);
    str.lastIndexOf(str,fromIndex);

返回指定子字符串在字符串中最后一次出现位置的索引;返回指定索引位置之前最后一次出现该子字符串的索引号。

3.1.5 字符串的类型转换

有时候需要在字符串与其他数据类型之间转换,例如将字符串类型数据变为整型数据,或者反过来将整型数据变为字符串类型数据,例如“20”是字符串类型数据,20就是整型数据。我们都知道整型和浮点型两者之间可以利用强制类型转换和自动类型转换两种机制实现转换,那么“20”和20这两种属于不同类型的数据就需要用到String类提供的数据类型转换方法了。

由于数据类型较多,因而转换使用的方法也比较多,如表3-1所示。

表3-1 字符串的类型转换