第十章 字符串

10.1 String类

单个字符可以用char类型保存,多个字符组成的文本就需要保存在String对象中。

10.1.1声明字符串

在Java语言中,字符串必须包含在一对双引号(" ")之内。例如:

"23.23","ABCDE","你好"

 可以通过以下语法格式来声明字符串变量:

String str 

1 String:指定该变量为字符串类型

2str:任意有效的标识符,表示字符串变量的名称

声明字符串变量s,代码如下:

String s;

10.1.2创建字符串 

在Java语言中,将字符串作为对象来处理,因此可以创建其它类对象一样来创建字符串对象。创建对象要使用类的构造方法。String类的常用构造方法如下。

1 String(char a[])

该方法用一个字符数组a创建String对象,代码如下:

char a []={'g','o','o','d'}

String s =new String(a)         等价于 String s=new String ("good")

2 String(char a[],int offset,int length)

该方法提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度

char a[]={'s','t','u','d','e','n','t'};

String s new String(a,2,4);      等价于String s=new String ("uden");

3 String(char [] value)

该构造方法可分配一个新的String对象,使其表示字符数组中所有元素连接的结果。

char a[]={'s','t','u','d','e','n','t'};

String s new String(a);                  等价于String s=new String ("student");

除通过以上几种使用String类的构造方法来创建字符串变量外,还可通过将字符串常量的引用赋值给一个字符串变量来创建字符串。 

String str1,str2;

str1 ="We are students"

str2 ="We are students"

第十章 字符串_第1张图片 

10.2连接字符串

对于已声明的字符串,可以对其进行相对应的操作,连接字符串就是字符操作中比较简单的一种。可以对多个字符串进行连接,也可使字符串与其他数据类型进行连接

第十章 字符串_第2张图片

 第十章 字符串_第3张图片

 10.2.1连接多个字符串

使用“+”运算符可实现连接多个字符串的功能。“+”运算符可以连接多个String对象并产生一个新的String对象

例10.1第十章 字符串_第4张图片

 10.2.2连接其他数据类型

字符串也可同其他基本数据类型进行连接。如果将字符串同其他数据类型数据进行连接,会将其他数据类型的数据直接转换成字符串。

例10.2第十章 字符串_第5张图片

10.3获取字符串信息 

字符串作为对象,可通过相对应方法获取字符串的有效信息,如获取某字符串的长度,某个索引位置的字符等。

第十章 字符串_第6张图片

10.3.1获取字符串长度

使用string类的length()方法可获取声明的字符串对象长度。语法如下

str.length();

其中,str为字符串对象。

获取字符串长度,代码如下

String str ="We are students";

 10.3.2字符串查找

string类提供了两种查找字符串的方法,即indexOf()与lastIndexOf()方法。这两种方法都允许在字符串中搜索指定条件的字符或字符串。indexOf()方法返回的是搜索的字符或字符串首次出现的位置,lastIndexOf()方法返回的是搜索的字符或字符串最后一次出现的位置。

1该方法用于返回参数字符串s在指定字符串中首次出现的索引位置当调用string类的indexof()方法时,会从当前字符串的检索s的位置。如果没有检索到字符串s该方法的返回值是-1,语法如下:

str.indexOf(sudstr)        

str:任意字符串对象

substr :要搜索的字符串

查找字符a在字符串str中的索引位置,代码如下

String str="We sre students";

int size=str.indexOf("a");             //变量size的值是3

 2lastlndexOf(String str)

该方法用于返回参数字符串最后一次出现的位置。当调用string类的lastIndexof()方法时,会从当前字符串的开始位置检索参数字符串str,并将最后一次出现str的索引位置返回。如果没有检索到字符串str该方法的返回-1,语法如下:

str.lastlndexOf(substr)

 str:任意字符串对象

substr :要搜索的字符串

例10.3第十章 字符串_第7张图片

10.3.3获取指定索引位置的字符

使用char At()方法可将指定索引处的字符返回,语法如下:

str.charAt(int index)

str:任意字符串

index :整型值,用于指定要返回字符的下标

例10.4

第十章 字符串_第8张图片

10.4字符串操作

String类中包含了很多方法,允许程序员对字符串进行操作来满足实际编程中的需要。

10.4.1获取子字符串

通过String 类的substring()方法可对字符串进行截取。substring()方法被两种不同的重载形式,来满足不同的需要。这些形式的共同点就是都利用字符串的下标进行截取,且应明确字符串下标是从0开始的。
1. substring(int beginlndex)
该方法返回的是从指定的索引位置开始截取直到该字符串结尾的子串。语法如下:

str.substring(int beginindex)

其中,beginIndex指定从某一索引处开始截取字符串。截取字符串,代码如下:

String str ="Hello World";      //定义字符串str 
String substr=str.substring(3); //获取字符串,此时 substr 值为 lo Worid 

2 substring(int beginlndex, int endlndex)
该方法返回的是从字符串某一索引位置开始截取至某一索引位置结束的子串。语法如下:

substring(int beginlndex, int endIndex) 

beginIndex:开始截取子字符串的索引位置。
endIndex:子字符串在整个字符串中的结束位置。 

例10.5第十章 字符串_第9张图片

10.4.2去除空格 第十章 字符串_第10张图片

trim()方法返回字符串的副本,忽略前导空格和尾部空格。语法如下

str.trim() 

其中,str为任意字符串对象

例10.6第十章 字符串_第11张图片

 10.4.3字符串替换

replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。语法如下:

str.replace(CharSequence target,CharSequence replacement)

target:要替换的字符或字符串。
replacement:用于替换原来字符串的内容。
replace()方法返回的结果是一个新的字符串。如果字符或字符串 oldChar 没有出现在该对象表达式中的字符串序列中,则将原字符串返回。

例10.7第十章 字符串_第12张图片

 10.4.4判断字符串的开始与结尾 第十章 字符串_第13张图片

 startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始或结束。这两个方法 的返回值都为boolean类型。
1.startsWith()方法
该方法用于判断当前字符串对象的前缀是否为参数指定的字符串。语法如下:

str.startsWith(String prefix) 

其中,prefix是指作为前缀的字符串。
2.endsWith()方法
该方法用于判断当前字符串是否为以给定的子字符串结束。语法如下:

str.endsWith(String suffix) 

其中,suffix是指作为后缀的字符串。

10.4.5判断字符串是否相等第十章 字符串_第14张图片

对字符串对象进行比较不能简单地使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串的内容相同,两个对象的内存地址也是不同的,使用比较运算符仍然会返回 false。使用比较运算符比较两个字符串,代码如下:

String tom=new String("I am a student");

String jerry=new String("I am a student");

boolean b=(tom==jerry);

 1.equals()方法
如果两个字符串具有相同的字符和长度,则使用equals()方法进行比较时,返回 true。否则,返回
false 语法如下:

str.equals(String otherstr) 

其中,str、otherstr是要比较的两个字符串对象。
2.equalslgnoreCase()方法
使用equals方法对字符串进行比较时是区分大小写的,而使用equalsIgnoreCase()方法是在忽略了大小写的情况下比较两个字符串是否相等,返回结果仍为boolean类型。语法如下:

str.equalslgnoreCase(String otherstr) 

其中,str、otherstr是要比较的两个字符串对象。

例10.9

第十章 字符串_第15张图片

 10.4.6按字典顺序比较两个字符串

compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode 值,按字典顺序将 String对象表示 的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为 0。语法如下:

str.compareTo(String otherstr)

其中,str、otherstr 是要比较的两个字符串对象。 

例10.10第十章 字符串_第16张图片

第十章 字符串_第17张图片 

10.4.7字母大小写转换 

String类的toLowerCase()方法可将字符串中的所有大写字母改写为小写字母,而toUpperCase()方法可将字符串中的所有小写字母改写为大写字母。

1.toLowerCase()方法
该方法将字符串中的所有大写字母转换为小写。如果字符串中没有应该被转换的字符,则将原字符串返回:否则将返回一个新的字符串,将原字符串中每个大写字母都转换成小写,字符串长度变。语法如下:

str.toLowerCase()

其中,str是要进行转换的字符串。
2.toUpperCase()方法
该方法将字符串中所有的小写字母转换为大写。如果字符串中没有应该被转换的字符,则将原字符串返回;否则返回一个新字符串,将原字符串中每个小写字母都转换成大写,字符串长度不变。

语法如下:

str.toUpperCase()

其中,str是要进行转换的字符串。

例10.11第十章 字符串_第18张图片

第十章 字符串_第19张图片 

 10.4.8字符串分割

使用split()方法可以使字符串按指定分割字符或字符串进行分割,并将分割后的结果存放在字符串数组中

1.split(String sign):

该方法可根据给定的分割符对字符串进行拆分,语法如下:

str.split(String sign)

其中,sign为分割字符串的分割符,以可以使用正则表达式

2.split(String sign ,int limit):

 该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数,语法如下:

str.split(Sring sign ,int limit)

 第十章 字符串_第20张图片

 10.5格式化字符串

String 类的静态format法用于创建格式化的字符串。format0方法有两种重载形式。

1. format(String format,Object...args)

该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地的的语言环境。语法如下:

str.format(StringformatObject...args)

 format:格式字符串。
args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为 0。
2.format(Local l,String format,Object...args)  
该方法使用指定的语言环境、格式字符串和参数返回一个格式化字符串,格式化后的新字符率用其指定的语言环境。语法如下:

str.format(Local lStringformatObjectargs

格式化过程中要应用的语言环境。如果1为null,则不进行本地化。
format:格式字符串。
args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略迎额外的参数。此参数的数目是可变的,可以为0。 

10.5.1日期和时间字符串的格式化

在应用程序设计中,经常需要显示日期和时间,如果想输出满意的日期或时间格式写大量的代码,经过各种算法才能实现,format()方法通过给定的特殊转换符作为参数来实时间的格式化

1日期格式化

先来看一个例子,返回一个月中的天数,代码如下:

Date date=new Date();    //创建Date 对象 date    
String s =String.format("%te", date);    //通过 format()方法对date进行格式化

 常用的日期格式化转换符第十章 字符串_第21张图片

第十章 字符串_第22张图片 

 第十章 字符串_第23张图片

 

2时间格式化

使用fomat()方法不仅可以完成日期的格式化,也可以实现时间的格式化。时间的格式化转换符要比日期的格式化转换符更多、更精确,它可以将时间格式化为时,分,秒,毫秒等。

时间格式化转换符第十章 字符串_第24张图片

第十章 字符串_第25张图片 

3.格式化常见的日期时间组合:

格式化日期与时间组合的转换符定义了各种日期时间组合的格式

常见的日期和时间组合的格式

第十章 字符串_第26张图片

 10.5.2常规类型格式化

常规类型格式化可应用与任何参数类型

常规转换符

第十章 字符串_第27张图片 

第十章 字符串_第28张图片 第十章 字符串_第29张图片

10.6使用正则表达式 

 正则表达式通常被用于判断语句中,用来检查某一字符串是否满足某一格式。正则表达式是含有一下具体特殊意义字符的字符串,这些特殊字符称为正则表达式的元字符。

正式表达式中,可以使用方括号括起若干个字符来表示一个元字符,该元字符可以代表方括号中的任何一个字符。

reg=“【abc】4”代表:a4,b4,c4。

【^456】:代表4、5、6之外的任何字符。

【a-r】:代表a-r中的任何一个字母。

【a-zA-Z】:可表示任意一个英文字母。

【a-e【g-z】】:代表a~r或g~z中的任何一个字母(并运算)。

【a-o&&【def】】:代表字母d、e、f(交运算)。

【a-d&&【^bc】】:代表字母a、d(差运算)。

在正则表达式中允许使用限定修饰符来限定元字符出现的次数,例如,“A*”代表A可在字符串中出现0次或多次第十章 字符串_第30张图片

10.7字符串生成器

创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果 重复地对字符串进行修改,将极大地增肌系统的开销。而JDK新增了可变的字符序列StringBuilder类,大大提供了频繁增加的字符串的效率第十章 字符串_第31张图片

第十章 字符串_第32张图片

 

通过这一实例可以看出,两种操作执行的时间差距很大。如果在程序中频繁地附加字符串,建议使用StringBuilder类    新创建的 StringBuilder对象初始容量是16个字符,可以自行指定初始长度。如果附加的字符超过可容纳的长度,则  StringBuilder将自长以容纳被字符。若要使用StringBuilder类最后输字结果,可使用toString方法。利用StringBuilder类中的方法可态地执行添加、删除和插入等字符串的编辑操作。该类的常用方法如下

1append()方法 

该方法用于向字符串生成器中追加内容。通过该方法的多个重载形式,可实现接受任何类型的数据,如int、boolean、char、String、double或者另一个字符串生成器等。语法如下:

append(content)

 其中,content器内,类数据或者其他对象

2. insert(int offset,arg)方法
该方法用于向字符串生成器中的指定位置插入数据内容。通过该方法的不同重载形式,可实现向字符串生成器中插入int、float、char 和boolean 等基本数据类型的数据或其他对象。语法如下:

insert(int offset arg)

ffset:字符串生成器的位置。该参数必须大于等于 0,且小于等于此序列的长度。

arg:将插入至字符串生成器的位置。该参数可以是任何数据类型的数据或其他对象。

向字符串生成器中指定的位置添加字符,代码如下:

StringBuilder bf =new StringBuilder("hello");    //创建字符生成器    
bf.insert(5, "world");    //添加至字符生成器的位置及内容    
System.out.printn(bf.toString());    //此时输出信息为helloworld

3. delete(int startint end)方法
移除此序列的子字符串中的字符。该子字符串从指定的start处开始,一直到索引end-1处的字符。如果不存在这种字符,则一直到序列尾部。如果start等于end,则不发生任何更改。语法如下:
delete(int start, int end)
start:将要删除的字符串的起点位置。

 end:将要删除的字符串的终点位置。

删除指定位置的子字符串,代码如下: 

StringBuilder bf=new StringBuilder(“StringBuilder”);//创建字符串生成器

bf.delete(5,10);                                                        //删除的子字符串

System.out.println(bf.toString());                             //此时输出的信息为String

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java,开发语言)