第6章字符串pp课件_第1页
第6章字符串pp课件_第2页
第6章字符串pp课件_第3页
第6章字符串pp课件_第4页
第6章字符串pp课件_第5页
已阅读5页,还剩61页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本章要点本章要点u 掌握字符串的掌握字符串的创建方式创建方式u 掌握字符串的掌握字符串的常用操作常用操作u 掌握字符串的掌握字符串的格式化格式化u 理解理解正则表达式正则表达式u 掌握掌握常见正则表达式常见正则表达式的定义的定义u 掌握掌握stringbuilder类类的用法的用法主要内容主要内容6.1 创建字符串创建字符串nstring类类即字符串类型,并不是即字符串类型,并不是java的基本的基本数据类型,但可以像基本数据类型一样使用。数据类型,但可以像基本数据类型一样使用。 要创建字符串可以通过多种方式实现。要创建字符串可以通过多种方式实现。n1) 可以通过为可以通过为字符串变量赋值字符

2、串变量赋值的方式来实例的方式来实例化字符串对象化字符串对象string s=“good”;sgood注意:注意:声明字符串变量必须经过初始化或赋值声明字符串变量必须经过初始化或赋值后才能使用,否则编译器会报出后才能使用,否则编译器会报出“变量未被初变量未被初始化始化”错误。错误。6.1 创建字符串创建字符串n2) 在在java中用中用java.lang.string类的构造方法类的构造方法来创建字符串变量。常用的构造方法如下:来创建字符串变量。常用的构造方法如下:pstring()创建一个创建一个string类型的对象,其内容为空。类型的对象,其内容为空。pstring(char a)使用指定

3、的字符数组创建字符串对象。使用指定的字符数组创建字符串对象。pstring(char a, int offset, int length)使用指定的字符数组创建字符串对象,使用指定的字符数组创建字符串对象,offset表表示字符数组起始位置。示字符数组起始位置。length表示长度。表示长度。6.1 创建字符串创建字符串char a =g,o,o,d;string s=new string(a);string s=new string(good); char a =s,t,u,d,e,n,t;string s=new string(a, 2, 4);string s=new string(ud

4、en);6.1 创建字符串创建字符串n3) 在在java中还可以通过调用中还可以通过调用string类的类的valueof方法来实例化字符串对象。方法来实例化字符串对象。例如:例如:int x=100;string s = string.valueof(x);n6.2.1 字符串连接字符串连接n6.2.2 获取字符串信息获取字符串信息n6.2.3 字符串比较字符串比较n6.2.4 字符串替换字符串替换n6.2.5 字符串分割字符串分割n6.2.6 大小写转换大小写转换n6.2.7 取出首末空格取出首末空格6.2 字符串操作字符串操作6.2.1 字符串连接字符串连接n字符串连接是字符串的基本操作

5、之一,有两字符串连接是字符串的基本操作之一,有两种方式可以实现:种方式可以实现:“+”string类的类的concat()方法方法n为了简单起见通常使用为了简单起见通常使用“+”而不会调用方法。而不会调用方法。nconcat()方法的语法如下。方法的语法如下。 public string concat(string str)6.2.1 字符串连接字符串连接【例【例6-1】分别使用】分别使用“+”和和concat()方法方法来连接字符串,并将结果输出。来连接字符串,并将结果输出。string str1 = hello + world!;string str2 = hello .concat(wo

6、rld!);system.out.println(使用+连接字符串: + str1);system.out.println(使用concat()方法: + str2);6.2.1 字符串连接字符串连接njava中一句相连的字符串不能分开在两行中一句相连的字符串不能分开在两行中写中写:system.out.println(“ “i likejava” ”)system.out.println(i like+java);6.2.1 字符串连接字符串连接n字符串同其它数据类型连接字符串同其它数据类型连接“money”+1+2“money”+(1+2)“money12”char a = g,o,o,d

7、;string s = new string(a);string s = new string(good);“money3”char a = g,o,o,d;string s = new string(a);string s = new string(good);6.2.2 获取字符串信息获取字符串信息n使用使用string类中类中length( )方法,可以获得当方法,可以获得当前字符串中包含的前字符串中包含的unicode代码单元个数。代码单元个数。通常情况下,即包含的字符个数。通常情况下,即包含的字符个数。n注意:注意:空格也算字符空格也算字符。一个汉字的长度也只有一个汉字的长度也只有1

8、。n注意:区分注意:区分string类的类的length( )方法与数组方法与数组的的length属性。属性。1. 获取字符串长度获取字符串长度string name = 一颗椰子树一颗椰子树; system.out.println(字符串字符串: + name + t长度为长度为: + name.length();1. 获取字符串长度获取字符串长度2. 获取指定字符的索引位置获取指定字符的索引位置nstring类的类的indexof()和和lastindexof()方法都方法都可以获得给定的字符可以获得给定的字符/字符串在目标字符串中字符串在目标字符串中的的索引位置索引位置,如果未找到匹配的

9、字符或字符串,如果未找到匹配的字符或字符串则会返回则会返回-1。nindexof()方法返回方法返回第一个第一个符合要求的索引值符合要求的索引值public int indexof(string str)nlastindexof() 返回返回最后一个最后一个符合要求索引值符合要求索引值public int lastindexof(string str)2. 获取指定字符的索引位置获取指定字符的索引位置string str = we are students ; int index = str.indexof(a); int lastindex=str.lastindexof(e);system

10、.out.println(a在+str+中的起始位置是: +index);system.out.println(e在+str+中的最后位置是: +lastindex);3. 获取指定索引位置的字符获取指定索引位置的字符nstring类的类的charat()方法可以获得方法可以获得指定索引指定索引位置的字符位置的字符,该方法的语法如下。,该方法的语法如下。public char charat(int index)index:目标字符的索引,其值在:目标字符的索引,其值在0和字符和字符串长度串长度-1之间。之间。string str = hello word;char mychar = str.c

11、harat(6);p取子串取子串n通过通过string类的类的substring()方法可对字符串方法可对字符串进行截取。进行截取。n1) substring(int beginindex)该方法返回的是从指定的索引位置开始截该方法返回的是从指定的索引位置开始截取直到该字符串的结尾的子串。取直到该字符串的结尾的子串。string str = hello word;string substr = str.substring(3);p取子串取子串n2) substring(int beginindex , int endindex)该方法返回的是从字符串该方法返回的是从字符串某一索引位置开始某一索

12、引位置开始截取至某一索引位置结束截取至某一索引位置结束(不包括结束位置不包括结束位置)的子串。的子串。string str = hello word;string substr = str.substring(0,3); 注意注意: endindex不要越界不要越界beginindex,str.length()6.2.3 字符串比较字符串比较nstring类的类的equals()方法方法可以用来比较两个字可以用来比较两个字符串的内容是否完全相同符串的内容是否完全相同public boolean equals(object anobject)nequalsignorecase()方法方法可以在可

13、以在忽略大小写忽略大小写的情况下比较两个字符串的内容是否相同的情况下比较两个字符串的内容是否相同public boolean equalsignorecase(string anotherstring)1. 比较全部内容比较全部内容1. 比较全部内容比较全部内容string s1 = new string(abc);string s2 = new string(abc);boolean b = s1.equals(s2);boolean b2 = s1.equalsignorecase(s2);system.out.println(s1 + equals + s2 + : + b); syst

14、em.out.println(s1 + equalsignorecase + s2 + : + b2);pjava的字符串池的字符串池string str1=abc;string str2=abc;string str3=new string(abc);system.out.println(str1=str2);system.out.println(str1=str3);n在进行字符串比较时,通过在进行字符串比较时,通过=比较对象时,比较比较对象时,比较的是两个对象使用的的是两个对象使用的内存地址内存地址是否相同;是否相同;n当使用当使用equals()方法比较两个对象时,只要两个方法比较两个

15、对象时,只要两个对象的内容相同,结果就为对象的内容相同,结果就为true,否则为,否则为false。njava虚拟机为了提高虚拟机为了提高字符串应用效率字符串应用效率,提供了,提供了字字符串池符串池来保存字符串常量,来保存字符串常量,nstr1创建字符串常量创建字符串常量“abc”,这时会先检测字符,这时会先检测字符串池中是否包含该字符串,如果不包含,则创建串池中是否包含该字符串,如果不包含,则创建字符串常量保存到字符串池中。字符串常量保存到字符串池中。nstr2也赋值为字符串也赋值为字符串“abc”,这是,这是由于字符串池由于字符串池中已经存在该字符串,所以不再创建中已经存在该字符串,所以不

16、再创建,也就是说,也就是说这这两个变量引用同一个字符串两个变量引用同一个字符串,那么它们的内存,那么它们的内存地址也是相同的,所以地址也是相同的,所以str1=str2成立。成立。n但是使用但是使用new关键字创建的字符串会新开辟内存关键字创建的字符串会新开辟内存空间所以空间所以str1=str3不成立。不成立。pjava的字符串池的字符串池2. 比较开头结尾比较开头结尾nstring类的类的startswith()方法可以用来判断是方法可以用来判断是否以给定字符串开头否以给定字符串开头,语法如下。,语法如下。 public boolean startswith(string prefix)p

17、refix:字符串前缀:字符串前缀nstring类的类的endswith()方法可以用来判断是否方法可以用来判断是否已给定字符串结尾已给定字符串结尾,语法如下。,语法如下。 public boolean endswith(string suffix)suffix:字符串后缀:字符串后缀2. 比较开头结尾比较开头结尾string num1 = 22045612; boolean b = num1.startswith(22); boolean b2 = num1.endswith(78); system.out.println(“字符串字符串num1是以是以22开始开始的的吗?吗? + b);s

18、ystem.out.println(“字符串字符串num1是以是以78结束结束的的吗?吗? + b2);p按字典顺序比较两个字符串按字典顺序比较两个字符串ncompareto()方法按字典顺序比较两个字符串,方法按字典顺序比较两个字符串,该比较基于字符串中各个字符该比较基于字符串中各个字符unicode值。值。如果按字典顺序此如果按字典顺序此string对象位于参数字符串对象位于参数字符串之前,则比较结果为一个负整数;之前,则比较结果为一个负整数;如果按字典顺序此如果按字典顺序此string对象位于参数字符串对象位于参数字符串之后,则比较结果为一个正整数;之后,则比较结果为一个正整数;如果这两

19、个字符串相等,则结果为如果这两个字符串相等,则结果为0。pareto(string otherstr)paretoignorecase(string otherstr)str、otherstr:参加比较的两个字符串对象。:参加比较的两个字符串对象。string str = new string(b);string str2 = new string(“a”);string str3 = new string(c);system.out.println(str + compareto + str2+ :+ pareto(str2);system.out.println(str + compare

20、to + str3+ :+ pareto(str3) );6.2.4 字符串替换字符串替换nstring类的类的replace()方法可以替换字符串内全方法可以替换字符串内全部指定子字符串为另一字符串部指定子字符串为另一字符串: public string replace(charsequence oldstr, charsequence newstr)replace()方法返回的结果是一个方法返回的结果是一个新的字符串新的字符串。如果字符串如果字符串oldchar没有出现在该对象表达式没有出现在该对象表达式中的字符串序列中,则将原字符串返回。中的字符串序列中,则将原字符串返回。如果要替换的字

21、符如果要替换的字符oldstr在字符串中重复出现在字符串中重复出现多次,多次,replace()方法会将所有方法会将所有oldstr全部替换全部替换成成newstr。string str = java project;string newstr = str.replace(j,j);此时,此时,newstr的值为:的值为:java project。需要注意的是,要替换的字符需要注意的是,要替换的字符oldstr的大小写的大小写要与原字符串中字符的大小写保持一致,否则要与原字符串中字符的大小写保持一致,否则不能成功的替换。不能成功的替换。string newstr = str.replace(p

22、,t);6.2.4 字符串替换字符串替换还可以用该方法实现串中字符还可以用该方法实现串中字符(子串子串)的删除的删除6.2.5 字符串分割字符串分割nstring类的类的split()方法可以用来分割字符串,方法可以用来分割字符串,也可以也可以限定拆分的次数。限定拆分的次数。 public string split(string regex) public string split(string sign,int limit) regex:用于分割字符串的符号或正则表达式:用于分割字符串的符号或正则表达式limit:用来限制返回数组中的元素个数:用来限制返回数组中的元素个数注意注意: :没有统

23、一的对字符进行没有统一的对字符进行分割的符号。分割的符号。如果想定义多个分隔符。可使用符号如果想定义多个分隔符。可使用符号“|”|”。6.2.5 字符串分割字符串分割【例【例6-5】输出给定字符串中单词的个数。】输出给定字符串中单词的个数。string message = so say we all! ;string split=message.split( ); system.out.println(message + 中共有 + split.length + 个单词!);6.2.5 字符串分割字符串分割string str=new string(abc,def,ghi,gkl);strin

24、g newstr = str.split(,);for (int i = 0; i newstr.length; i+) system.out.println(newstri);string newstr2 = str.split(,2);for(int j = 0;jnewstr2.length;j+)system.out.println(newstr2j);6.2.6 大小写转换大小写转换nstring类的类的touppercase()和和tolowercase()方法可以用来将字符串转换为全部大写和全方法可以用来将字符串转换为全部大写和全部小写的形式,语法如下。部小写的形式,语法如下。

25、public string touppercase() public string tolowercase()如果字符串中没有应该被转换的字符,则将原如果字符串中没有应该被转换的字符,则将原字符串返回。字符串返回。否则将返回一个新的字符串,新字符长度与原否则将返回一个新的字符串,新字符长度与原字符长度相同。字符长度相同。【例【例6-6】 将给定的字符串转换为大写和小写将给定的字符串转换为大写和小写形式并输出。形式并输出。6.2.6 大小写转换大小写转换string message = so say we all!;system.out.println(message);system.out.p

26、rintln(转换为大写形式: + message.touppercase();system.out.println(message);system.out.println(转换为小写形式: + message.tolowercase();6.2.7 去除首末空格去除首末空格nstring类的类的trim()方法方法可以用来去除字符串可以用来去除字符串首末空格。在获得用户输入信息时,通常会首末空格。在获得用户输入信息时,通常会使用该方法,其语法如下。使用该方法,其语法如下。 public string trim()【例【例6-7】 去掉给定字符串的首末空格并输去掉给定字符串的首末空格并输出结果

27、。出结果。6.2.7 去除首末空格去除首末空格string message = so say we all! ;system.out.println(字符串长度: + message.length();system.out.println(去除空格后字符串长度: + message.trim().length(); 【例】小写字母字符串循环右移【例】小写字母字符串循环右移3位进行加密位进行加密字符串字符串字符数组字符数组string word = abcxyz;char arr = word.tochararray();for(int i=0;i=a&arri 5);string st

28、r3 = string.format(%x,200);string str4 = string.format(%.2f,1.2685);system.out.println(400的一半是:的一半是:+str);system.out.println(35正确吗:正确吗:+str2);system.out.println(200的的16进制数是:进制数是:+str3);system.out.println(1.2685保留两位小数是:保留两位小数是:+str4);6.3.5 常规类型格式化常规类型格式化 n6.4.1 判断是否符合正则表达式判断是否符合正则表达式n6.4.2 正则表达式的元字符正

29、则表达式的元字符 n6.4.3 正则表达式的限定符正则表达式的限定符n6.4.4 方括号中元字符的含义方括号中元字符的含义6.4 正则表达式正则表达式 n正则表达式是事先定义好的一些特殊字符及正则表达式是事先定义好的一些特殊字符及这些特殊字符的组合,组成一个这些特殊字符的组合,组成一个“规则字符规则字符串串”。n用来表达对字符串的过滤逻辑,通常被用于用来表达对字符串的过滤逻辑,通常被用于判断语句中,来检查某一字符串是否满足某判断语句中,来检查某一字符串是否满足某一格式。一格式。6.4 正则表达式正则表达式 6.4.1 判断是否符合正则表达式判断是否符合正则表达式nstring类的类的match

30、es()方法方法提供了比较字符提供了比较字符串与给定正则表达式是否匹配的功能,串与给定正则表达式是否匹配的功能,n该方法的语法如下该方法的语法如下 public boolean matches(string regex)regex:用于比较的正则表达式。:用于比较的正则表达式。n由由一些含有特殊意义的字符组成的字符串一些含有特殊意义的字符组成的字符串,这些含有特殊意义的字符称为元字符。这些含有特殊意义的字符称为元字符。6.4.2 正则表达式的元字符正则表达式的元字符 p81p816.4.2 正则表达式的元字符正则表达式的元字符【例【例6-16】 判断给定的字符串是否符合特定的判断给定的字符串是

31、否符合特定的正则表达式。正则表达式。大写字母大写字母+3个小写字母个小写字母+3个数字个数字。string regex = pupperplowerplower plowerddd;string message1 = swjt001; string message2 = swjt001;boolean result1 = message1.matches(regex);boolean result2 = message2.matches(regex);system.out.println(message1 + 合法: + result1); system.out.println(message

32、2 + 合法: + result2);n在使用正则表达式时,如果要在使用正则表达式时,如果要某一类型的元某一类型的元字符多次输出字符多次输出,逐个输入就相当麻烦,可以,逐个输入就相当麻烦,可以使用正则表达式的限定元字符来重复次数。使用正则表达式的限定元字符来重复次数。6.4.3 正则表达式的限定符正则表达式的限定符 p83p83string regex = w1,w1,.1w1,;string str1 = aaa;string str2 = aaaa;string str3 = ;system.out.println(str1.matches(regex);system.out.printl

33、n(str2.matches(regex);system.out.println(str3.matches(regex);6.4.3 正则表达式的限定符正则表达式的限定符 n在正则表达式中还可以用方括号把多个字符在正则表达式中还可以用方括号把多个字符括起来表示一个元字符,该元字符可代表方括起来表示一个元字符,该元字符可代表方括号中的任何一个字符。括号中的任何一个字符。6.4.4 方括号中元字符的含义方括号中元字符的含义 p83p83【例【例6-18】判断给定字符串是否为合法手机号】判断给定字符串是否为合法手机号6.4.4 方括号中元字符的含义方括号中元字符的含义 string regex =

34、(13d|15036-9|1889)d8$;string number =boolean match = number.matches(regex);system.out.println(number + n合法手机号码: + match); 【例】统计汉字个数【例】统计汉字个数 6.4.4 方括号中元字符的含义方括号中元字符的含义 string m= 我爱学java;string regex= u4e00-u9fff$;int c=0;for(int i=0;im.length();i+)if (+m.charat(i).matches(regex) c+;syst

35、em.out.println(m+中包含+c+个汉字);6.5 可变字符串可变字符串n使用使用java中的中的string类创建字符串,它的长度类创建字符串,它的长度是固定的,其内容不可以修改,即每次是固定的,其内容不可以修改,即每次“修改修改”都相当于创建一个新的字符串。都相当于创建一个新的字符串。这在大量操作这在大量操作字符串的场合性能并不理想。为了解决这个问字符串的场合性能并不理想。为了解决这个问题,题,在在api中提供了中提供了stringbuilder类,使用它类,使用它来创建的字符串,内容可以实现真正意义上的来创建的字符串,内容可以实现真正意义上的修改。修改。string str

36、= ;/创建空字符串创建空字符串long startime = system.currenttimemillis();/定义对字符串执行操作的起始时间定义对字符串执行操作的起始时间for(int i = 0;i10000;i+)str = str+i;/循环追加字符串循环追加字符串long endtime = system.currenttimemillis();/定义对字符串操作后的时间定义对字符串操作后的时间long time = endtime - startime;/计算对字符串执行操作的时间计算对字符串执行操作的时间system.out.println(sting消耗时间:消耗时间:

37、+time);6.5 可变字符串可变字符串nstringbuffer类对象是可变的字符串,类对象是可变的字符串,有改变有改变字符串的若干方法。字符串的若干方法。nstringbuffer类构造函数类构造函数stringbuffer()stringbuffer(int length) /设置初始容量设置初始容量stringbuffer(string s) /设置初始值设置初始值nstringbuffer类方法类方法string tostring() /转换为转换为string类型字符串类型字符串void setcharat(int index , char c) /修改字符修改字符6.5 可变字

38、符串可变字符串 n新创建的新创建的stringbuilder对象初始容量是对象初始容量是16个个字符。可以自行指定初始长度。如果附加的字符。可以自行指定初始长度。如果附加的字符超过可容纳的长度,则字符超过可容纳的长度,则stringbuilder对对象将自动增加长度以容纳被附加的字符。象将自动增加长度以容纳被附加的字符。n若要使用若要使用stringbuilder最后输出字符串结果。最后输出字符串结果。可使用可使用tostring()方法。方法。n应用应用stringbuilder类中的方法可动态的执行类中的方法可动态的执行添加、删除、插入等字符串的编辑操作。添加、删除、插入等字符串的编辑操作。stringbuilder类常用方法类常用方法nappend()方法方法该方法用于向字符串生成器中追加内容,通该方法用于向字符串生成器中追加内容,通过该方法的多个重载

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论