目录
在java中字符串作为String类的实例来处理,以对象的方式处理字符串,使字符串更加灵活、方便。
5.1String类
前面介绍,char类型只能表示单个字符,不能表示多个字符连接而成的字符串。在java中将字符串作为对象来处理,可以通过java.lang包中的String类来创建字符串对象。
5.1.1声明字符串
java语言中的字符串必须包含在一对双引号" "内,由双引号包围的都是字符串,不能作为其他数据类型来使用,例如"1+2"的结果不可能是3.
声明字符串的语法如下:
String:指定该变量为字符串类型;
str:任意有效的标识符,表示字符串变量的名称;
注意,字符串变量必须经过初始化才能使用,否则编译器会爆出“变量未被初始化错误”。
5.1.2创建字符串
java将字符串作为对象来处理,因此可以像创建其他类对象一样来创建字符串对象。创建对象要使用类的构造方法,String类常用的构造方法如下:
(1)String(char a[]) 用一个字符数组a创建String对象
(2)String (char a[],int offset,in tlength) 提取字符数组a的一部分创建字符串对象,两个参数分别代表截取数组的起始位置;
(3)String(char[] a)分配一个新的String对象,使其表示字符数组参数中所有元素连接的结果;
除了以上几种方法之外,还可以通过字符串常量的引用赋值给一个字符串变量:
此时两个字符串str1和str2引用相同的字符串变量,因此具有相同的实体。内存示意图如下:
即两个指针指向相同的内容.
5.2连接字符串
可以对多个字符串进行连接,也可以将字符串与其他数据类型进行连接;
5.2.1连接多个字符串
使用"+"运算符可以实现连接多个字符串的功能,并产生一个String对象。
注意,java中一句相连的字符串不能分开在两行中写。例如:
这种写法是错误的。如果一个字符串太长,可以将字符串分在两行书写,并且用"+"将两段字符串连接起来。因此上面的语句可以修改为:
5.2.2连接其他类型数据
如果将字符串与其他数据类型连接,会将这些数据直接转换为字符串。
在这里booktime和practice都不是字符串,当它们与字符串连接时会自动调用toString()方法,将其转换为字符串类型,然后参与连接。
注意,只要"+"连接符的一个操作数是字符串,编译器就会自动将另一个操作数转换成字符串形式,所以要谨慎将字符串与其他数据连接。
如果将上例的语句修改为:
由于运算符是有优先级的,圆括号的优先级最高,所以最先被执行,得到结果再与字符串连接。所以结果如下:
5.3获取字符串信息
字符串作为对象,可以通过相应方法获取字符串的有效信息,如获取某字符串的长度、某个索引位置的字符等。
5.3.1获取字符串长度
使用String类的length() 方法可以获取字符串对象的长度。语法如下:
其中,str为字符串对象;
上述代码将字符串str的长度赋给int型变量size,此时size的值为15,这表示length()方法返回的字符串长度包括字符串中的空格;
5.3.2字符串查找
String类提供了两种查找字符串的方法,即indexOf()与lastIndexOf()方法。前者返回是的搜索的字符串在目标字符串中首先出现的索引位置,后者返回的是搜索的字符串在目标字符串中最后一次出现的索引位置。
(1) indexOf(String s) 该方法用于返回参数字符串s在目标字符串中首次出现的索引位置;如果没有检测到字符串s,该方法的返回值是-1。语法如下:
理解字符串的索引位置,要对字符串的下标了解。在计算机中String类的对象是用数组表示的,字符串的下标是0~length()-1。上例中字符串str的下标如下:
(2)lastIndexOf(String s) 该方法用于返回参数字符串s在目标字符串最后一次出现的索引位置;如果没有检测到字符串s,该方法返回-1。语法格式如下:
如果lastIndexOf()方法中的参数是空字符串""(注意没有空格),则返回结果为目标字符串的长度。
5.3.3获取指定索引位置的字符
使用charAt()方法可以获取指定索引位置的字符,语法如下:
str为目标字符串,index为目标字符串的索引。
5.4字符串操作
String类包含了很多方法,允许程序员进行操作来满足实际编程的需求。
5.4.1获取子字符串
通过String类的substring()方法可以对字符串进行截取,这些方法的共同点就是都是利用字符串的下标进行截取,且字符串的下标是从0开始。substring()方法被两种不同的方法重载,来满足不同的需求。
(1)substring(int beginIndex) 该方法返回的是从指定的索引位置截取直至该字符串结尾的子串。语法如下:
其中str为目标字符串,beginIndex为索引位置。
注意,在字符串中空格占一个索引位置。
(2)substring(int beginIndex,int endIndex) 该方法返回的是从beginIndex~endIndex-1位置的子串。语法如下:
5.4.2去除字符串中的空格
trim()方法返回字符串的副本,忽略前导空格和尾部空格。语法如下:
5.4.3字符串替换
replace()方法可以实现将指定的字符串替换成新的字符串。语法如下:
如果字符串oldchar没有出现在str中,则将str原字符返回。
注意,如果要替换的字符串oldchar在str中出现多次,那么replace()方法会将所有的oldchar全部替换为newchar;此外,要替换的字符oldchar的大小写要与str中的大小写一致,否则不能替换成功。再次强调,java严格区分大小写!!
5.4.4判断字符串的开始与结尾
startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始或结束,这两个方法的返回值都为boolean类型。
(1)startsWith() 该方法用于判断当前字符串的前缀是否是参数指定的字符串。语法如下:
(2)endsWith() 该方法用于判断当前字符串是否以参数指定的字符串结束。语法如下:
suffix是指作为后缀的字符串;
5.4.5判断字符串是否相等
对字符串对象进行比较不能简单地使用比较运算符"==",因为比较运算符比较的是两个字符串的地址。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符也会返回false。
因为字符串是对象,tom和jerry是指针,指针所存放的地址是不同的。
内容相同,地址不同。
因此,要比较两个字符串的内容是否相同,应该使用equals()和equalsIgnoreCase()方法。
(1)equals() 如果两个字符串有相同的长度和字符,返回true.语法如下:
(2)equalsIgnoreCase() 前面的equals()方法是区分大小写的,而使用该方法是在忽略大小写的情况下比较两个字符串是否相等,返回值依然是boolean类型。语法如下:
5.4.6按字典顺序比较两个字符串
compareTo()方法按字典顺序比较两个字符串,语法如下:
如果str在字典中的位置位于otherstr之前,则返回-1;位置相同,且大小写相同,则返回0;位置再otherstr之后,则返回1;注意,只有在两个两个字符串完全相同(区分大小写)时,该方法才返回0.
5.4.7字母大小写转换
字符串的toLowerCase()方法可以将字符串中的所有大写字母全部转换为小写,而toUpperCase()方法正好相反。
(1)toLowerCase() 将String转换为小写。语法如下:
(2)toUpperCase() 将String转换为大写。语法如下:
注意,使用上述方法进行大小写转换时,数字或非字符不受影响。
5.4.8字符串分割
使用split()方法可以将字符串按指定的分割字符或字符串对内容进行分割,并将分割后的结存入字符串数组中。split()方法提供了一下两种重载形式:
(1)split(String sign) 根据给定的分隔符对字符串进行分割。语法如下:
没有统一的对字符进行分割的符号,如果想定义多个分割符,可以使用符号“|”.例如,",|="表示分隔符为","和"=".
(2)split(String sign,int limit) 根据给定的分隔符对字符串进行拆分,并限定分割的次数。语法如下:
5.5格式化字符串
String类的静态方法format()用于创建格式化的字符串,该方法有两种重载形式:
(1)format(String format,Object...args)
使用指定的格式字符串和参数返回一个格式化字符串,格式化后的字符串使用本地默认的语言环境。语法如下:
(2)format(Local 1,String format,Object...args)
Local 1表示格式化过程中要应用的语言环境,如果1为null,则不进行本地化。
5.5.1日期和时间字符串格式化
format()方法通过给定的特殊转换符实现对日期和时间的格式化。
1.日期格式化
2.时间格式化
使用format方法可以将时间格式化为时、分、秒、毫秒。格式化时间的转换符如下表所示:
3.格式化常见的时间日期组合
最常用的日期和时间的组合格式如下所示:
5.5.2常规类型格式化
5.6使用正则表达式
正则表达式通常用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式含有一些具有特殊意义的字符串,这些特殊字符串称为正则表达式的元字符。
注意,在正则表达式中"."代表任意一个字符,因此要想在正则表达式中使用普通意义的点字符".",必须使用转义字符"\."。
此外,在正则表达式中可以使用方括号将若干个字符括起来表示一个元字符,该原字符可以代表方括号中的任意一个字符。例如reg="[abc]4",这样字符串a4,b4,c4都是个正则表达式匹配的字符串。方括号元字符还可以为其他格式:
在正则表达式中允许使用限定修饰符来限定元字符出现的次数,如A*代表A可以在字符串中出现0次或1次。限定符的用法如下所示:
5.7字符串生成器
创建成功的字符串对象,其长度是固定的,内容不能被改变或编译。在java中新增了可变的字符序列StringBuilder类,大大提高了频繁增加字符串的效率。
若想使用StringBuilder最后输出的字符串内容,可使用toString()方法。
利用StringBuilder类中的方法可动态的执行添加、删除和插入等字符串的编辑操作,该类的常用方法如下:
(1)append() 该方法用于向字符串生成器中追加内容,语法如下:
(2)insert(int offset,arg) 该方法用于向字符生成器中的指定位置插入数据内容,语法如下:
(3)delete(int start,int end) 移除字符串从索引start~end-1位置的字符,语法如下: