我这些学习笔记,记录的都是我自己认为的知识点,可能以后再看的时候还要翻书,但是可以用来定位到准确的书中示例的位置,减少翻书重找的时间,利于自身知识体系的搭建。 self-transcendence
第5章 字符串
java将字符串作为对象来处理,通过java.lang包中的String类来创建字符串
5.1.1 声明字符串
由“”符号包围的都是字符串。
5.1.2 创建字符串
创建字符串要使用类的构造方法。String的构造方法如下:
1.String ( char a[] );//用一个字符数组a创建String对象
实例:String s = new String ( “good” );//这个good实际上就是char a[]={‘g’,’o’,’o’,’d’};
2.String ( char a[] , int offset , int length );//提取字符组a中一部分创建一个字符串对象,从哪里开始,长度是多少。
实例:String s = new String ( “good” );//等价于char a[]={‘g’,’o’,’o’,’d’}; String s = new String (a,2,4);
3.通过字符串常量的引用赋值给一个字符串变量
String str1,str2;
str1=”one”;
str2=”one”;
因为str1和str2引用的相同的字符串,所以具有相同的实体
内存示意图如下:
str1 one
str2
5.2 字符串操作
字符串的下标是从0开始的
5.2.1 连接多个字符串
“+”运算符实现多个字符串的连接功能。
5.3.1 获取字符串长度(返回值int)
.length ( ) ;//字符串长度包括空格
5.3.2 字符串查找(返回值int)
.indexOf ( String s );//返回搜索字符或字符串首次出现的位置
实例:str .indexOf ( “a” );//找不到返回-1
.lastIndexOf ( String s );//搜索字符或字符串最后一次出现的位置
实例:str . lastIndexOf ( “a” ); //找不到返回-1
str . lastIndexOf ( “” ) == str . length ( );//lastIndexOf的参数为空,等价于length方法
5.3.3 获取指定索引位置的字符(指定下标)(返回值char)
.charAt ( int index ) ;//将指定索引位置的字符返回
5.4.1 获取子字符串(返回值String)
.substring ( int beginIndex );//从指定索引位置开始截取
.substring ( int beginIndex , int endIndex);//从指定的开始位置截取到指定的结束位置
5.4.2 去除空格(返回值String)
.trim ( );//去除字符串首尾空格
5.4.3 字符串替换(返回值String)
.replace ( char oldChar , char newChar );///将指定字符或字符串替换成新的
实例:str.replace (“a”,”A”);//原字符串的a替换成A。如果原字符串没有a,则返回原字符串
5.4.4 判断字符串的开始与结尾(返回值boolean)
.startsWith ( String s);//字符串开头是不是跟参数一致
.endsWith ( String s);//字符串结尾是不是跟参数一致
5.4.5 判断字符串是否相等
字符串的比较不能用==,因为==比较的是两个字符串的内存地址是否相等。即使两个字符串的内容相同,两个对象的内存地址也是不一样的,使用==仍然会返回false。
.equals ( String s);//区分大小写,具有相同的字符和长度,返回true;
.equalslgnoreCase ( String s);//不区分大小写,两个字符串相等,返回true;
5.4.6 按字典顺序比较两个字符串
str.compareTo ( String s);//按字典顺序比较两个字符串,该比较基于字符串中各个字符的unicode值。将两个字符串的字符序列进行比较,str < s返回负整数(str在s前面),str > s(str在s后面)返回正整数,相等返回0
5.4.7 字母大小写转换
.toLowerCase ( );//把字符串中所有大写字母改为小写字母,没有大写返回原字符
.toUpperCase ( );//把字符串中所有小写字母改为大写字母,没有小写返回原字符
5.4.8 字符串分割
.split ( String sign);//根据参数分割,参数出现几次,分割几次
.split ( String sign , int limit);//根据int分割,int是几从第一次出现的参数位置开始,有几次分割几次。
5.5 格式化字符串
.format ( String format ,Object args);//用指定的格式和参数,返回一个指定格式的参数。
5.5.1 日期和时间字符串格式化
1.日期格式化
Date date = new Date();
String s = String.format( “%te”,date);//如果今天是2号,那么s的值为2。
转换符 |
说明 |
示例 |
%te |
一月中的某一天(1-31) |
2 |
%tb |
指定语言环境的月份简称 |
Feb、二月 |
%tB |
指定语言环境的月份全称 |
February、二月 |
%tA |
指定语言环境的星期几全称 |
Monday、星期一 |
%ta |
指定语言环境的星期几简称 |
Mon、星期一 |
%tc |
包括全部日期和时间信息 |
星期二 三月 25 13:37:22 CST 2008 |
%tY |
4位年份 |
2008 |
%tj |
一年中的第几天(001-366) |
085 |
%tm |
月份 |
03 |
%td |
一个月中的第几天(01-31) |
02 |
%ty |
2位年份 |
08 |
5.6 正则表达式
5.7 字符串生成器
创建的字符串对象,长度固定,内容不能改变和编译。“+”可以附加新字符或字符串,但是会产生一个新的“String”实例,会在内存中创建新的字符串对象。重复对字符串修改,会极大的提升系统的负担。
如果程序中频繁的附加字符串,要使用StringBuilder。
新创建的StringBuilder初始容量是16个字符,可以自行指定初始长度。如果附加的字符超过可容纳的长度,StringBuilder会自动增加长度用来容纳被附加的字符。最后使用toString()方法来得到字符串。
.append ( content );//向字符串生成器中追加内容,内容是object类型的。
.insert ( int offset , arg);//向字符串生成器指定位置插入内容,内容是object类型的。
.delete ( int start , int end);//从start下标处开始,移除到end-1处下标的字符。如果不存在end-1这个字符,就一直删除到尾。