版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章第八章 字符串字符串第八章第八章 字符串字符串技能目标:技能目标:通过本章的学习,熟悉Java语言中字符串的表示和使用方法,掌握字符串的创建和常用操作方法,熟悉String类和StringBuffer类的基本使用情况,能够使用字符串解决具体问题。熟悉Java类库中java.lang包的使用,了解常用系统类的基本使用方法。知识目标:知识目标:掌握字符串的类型和基本概念;掌握String类和StringBuffer类的使用;掌握字符串的属性和常用成员方法的使用;熟悉main()方法参数传递的实现和基本用法;进一步熟悉面向对象编程的方法。本章任务:本章任务:进一步完善教务管理系统,实现系统中各
2、模块相关对象信息的注册验进一步完善教务管理系统,实现系统中各模块相关对象信息的注册验证。证。 8.1 String类的创建 字符串是由零个或多个字符组成的有限序列。在Java语言中,String类是处理字符串的标准格式,它主要用于处理内容不会改变的字符串,即处理字符串常量。当创建一个String对象时,被创建的字符串是不能被改变的。每次需要改变字符串时都要创建一个新的String对象来保存改变后的内容,原始的字符串不变。 8.1.1 String类的创建 在Java中,用双引号括起来的字符序列是字符串常量,也称为无名字符串对象,可以包括字母、数字和各种特殊符号,如、*、#、$等,例如:You
3、are student!。当字符串中仅包含一个字符时,要注意它和字符常量的区别,例如:a是字符串常量,而 a 是字符常量。 8.1.1 String类的创建创建String字符串,就是创建String类的对象,可以通过以下两种方式来实现:(1)用字符串常量直接初始化一个String类的对象 String 字符串变量名=字符串常量;例如: String str1;或 String str2=“You are student!”;此时,字符串变量str1的值为null,表示它只是个空的字符串,没有分配内存,后面可以对其进行实例化或进行字符串常量赋值;而字符串变量str2保存了字符串You are
4、student!的存储地址,可以对其进行引用。 8.1.1 String类的创建Java语言还定义了一个String对象的运算符“+”,它的作用是连接两个字符串。上面的语句也可以表示为 String str=You +are +student!;其功能与前一句相同。8.1.1 String类的创建(2)通过String类提供的构造方法创建字符串对象 Java重载了String类的构造方法,允许使用不同的参数形式实现字符串对象的创建。String类常用的构造方法如下。String(); /初始化一个新创建的String对象,表示一个空字符序列。String(String); /初始化一个新创建的
5、String对象,表示一个与该参数相同的字符序列。String(byte); /创建一个String对象,其值由一个字节数组的内容设置String(char); /创建一个String对象,其值由一个字符数组的内容设置String(byte,int,int); /创建一个新的String,其值由来自该字节数组参数的一个子数组的元素构成。String(char,int,int); /创建一个新的String,它包含来自该字符数组参数的一个子数组的字符。8.1.1 String类的创建例如:String str1=new String(); /创建一个空字符串str1。String str=He
6、is a good boy;String str2=new String(str); /创建一个字符串str2,其内容与str相同。char c= a , b , c , d , e ;String str3=new String(c); /用字符串abcde初始化str3。String str4=new String(c,2,3); /用字符串cde初始化str4。8.1.1 String类的创建例8-1字符串使用举例。class Exam8_1 public static void main (String args) String s1=hello; /声明字符串对象且进行赋值。 Str
7、ing s2=new String(); /声明字符串对象 s2=hello; /字符串对象赋值 String s3=new String(hello); /创建字符串对象且调用构造方法进行初始 char c=h,e,l,l,o; /创建字符数组 String s4=new String(c); /通过字符数组初始化字符串对象 byte b=104,101,108,108,111; /创建字节数组 String s5=new String(b); /通过字节数组初始化字符串对象 System.out.println(s1=+s1); System.out.println(s2=+s2); Sy
8、stem.out.println(s3=+s3); System.out.println(s4=+s4); System.out.println(s5=+s5); 8.1.1 String类的创建 例8-2打印成绩单。 8.1.1 String类的创建class Exam8_2 public static void main(String args) int sqlScore = 80; / sql成绩int javaScore = 90; / java成绩double htmlScore = 86.7; / html成绩String scoreSheet = SQL: + sqlScore+
9、 Java:+javaScore+ HTML:+htmlScore;/ 打印成绩单System.out.println(*李雷成绩单*);System.out.println(scoreSheet);8.1.2 String类的常用方法 对字符串的操作是通过String类提供的方法实现的。一个String对象被创建后,将无法改变字符串的内容,但仍然可以对字符串对象执行各种类型的操作,比如访问字符串、子串搜索、字串截取、字符串比较、修改等。需要明确的是,每次需要改变字符串时都要创建一个新的String对象来保存改变后的内容,而原始的字符串不变。 8.1.2 String类的常用方法下面介绍几种常
10、用的字符串操作方法:char charAt(int index):返回字符串中指定索引位置上的字符。int compareTo(String anotherString):按字典顺序比较两个字符串。int compareToIgnoreCase(String str):忽略大小写,比较两个字符串。String concat(String str):将指定字符串连接到次字符串的结尾。boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。boolean equals(Objiect anObject):比较此字符串与制定的对象是否相等。boolean e
11、qualsIgnoreCase(String anotherString):忽略大小写,将两个字符串进行比较,判断是否相等。8.1.2 String类的常用方法int indexOf(int ch):返回指定字符在字符串中第一次出现处的索引。int indexOf(int ch,int fromIndex):从指定的索引开始搜索,返回在此字符串中第一次出现指定字符处的索引。int indexOf(String str):返回第一次出现的指定子字符串在此字符串中的索引。int indexOf(String str,int fromIndex:从指定的索引处开始,返回第一次出现的指定子字符串在此字
12、符串中的索引。int lastIndexOf(int ch):返回最后一次出现的指定字符在此字符串中的索引。int lastIndexOf(int ch,int fromIndex):从指定的索引处开始进行后向搜素,返回最后一次出现的指定字符在此字符串中的索引。int lastIndexOf(String str):返回在此字符串中最右边出现的指定子字符串的索引。int lastIndexOf(String str,int fromIndex):从指定的索引处开始进行后向搜素,返回在此字符串中最后一次出现的指定子字符串的索引。int length():返回此字符串的长度。8.1.2 Strin
13、g类的常用方法 例8-3 String类常用方法举例。8.1.2 String类的常用方法class Exam8_3 public static void main (String args) String str=Student; /创建字符串对象并赋值 System.out.println(str); /求字符串串长System.out.println(the length of the String is: +str.length();/获取指定位置的字符 System.out.println(the character index 4 is: +str.charAt(4); /求指定字
14、符在串中首次出现位置 System.out.println(the index of the character u is: +str.indexOf(u); /求子串 System.out.println(the substring from index 3 to end is: +str.substring(3); /求指定区域的子串 System.out.println(the substring from index 1 to index 3 is: +str.substring(1,3); /实现串中字符的大小写转换 System.out.println(the upper case
15、 is: +str.toUpperCase(); System.out.println(the lower case is: +str.toLowerCase(); 8.1.2 String类的常用方法例8-4 字符串比较示例。class Exam8_4 public static void main (String args) String s1=aaa; /创建待比较的字符串对象 String s2=aaa; String s3=AAA; String s4=bcd; /判断s1和s2是否相等if(s1.equals(s2) System.out.println(s1=s2); else
16、System.out.println(s1!=s2); /忽略大小写,判断s1和s3是否相等 if(s1.equalsIgnoreCase(s3) System.out.println(s1=s3 when ignoring case); 8.1.2 String类的常用方法 else System.out.println(s1!=s3 when ignoring case); /比较s1和s4的大小if(pareTo(s4)0) System.out.println(s1s4); 8.1.2 String类的常用方法 Java语言提供了四种比较字符串的方法:equals、equalsIgno
17、reCase、compareTo、compareToIgnoreCase。其中,equals()方法和equalsIgnoreCase()方法都用来检验两个字符串是否相等,不同之处在于,后者在比较时不区分字母大小写,两个方法的返回值均为布尔型true或false。compareTo()和compareToIgnoreCase()方法用于比较两个字符串的大小,后者在比较时不区分字母大小写,两个方法的返回值为整型,如果返回值大于0,则给定串比参数中的串大,如果返回值小于0,则给定串比参数中的串小,如果返回值为0,则表示两个字符串相等。 8.1.2 String类的常用方法 例8-5 字符串应用举例
18、:输入用户的身份证号码,提取该用户的生日,并输出。 8.1.2 String类的常用方法import java.util.Scanner;class Exam8_5 public static void main(String args) System.out.print(请输入用户的身份证号码: );Scanner input = new Scanner(System.in);String id = input.next(); /读取身份证信息String year = ;String month = ;String day = ;if(id.length() != 18) /有效身份证号码
19、为18位System.out.println(n身份证号码无效!);elseyear = id.substring(6,10); /提取年month = id.substring(10,12); /提取月day = id.substring(12,14); /提取日System.out.println(n该用户生日是: + year + 年 + month + 月 + day + 日);8.1.2 String类的常用方法例8-6字符串检查:文件及邮箱格式检查(使用substring) import java.util.*;class Exam8_6 public static void ma
20、in(String args) / 声明变量boolean fileCorrect = false;boolean emailCorrect = false;System.out.println(-欢迎进入作业提交系统-);Scanner input = new Scanner(System.in);System.out.println(请输入Java文件名: );String fileName = input.next();System.out.println(请输入你的邮箱);String email = input.next();/ 检查Java文件名int index = fileNa
21、me.lastIndexOf(.);/检查文件名情况8.1.2 String类的常用方法if (index0&fileName.substring(index+1,fileName.length().equals(java) fileCorrect = true; else System.out.println(文件名无效。);/ 检查你的邮箱格式if (email.indexOf()0&email.indexOf(.)email.indexOf() emailCorrect = true;else System.out.println(Email无效。);/ 输出检测结果if
22、 (fileCorrect&emailCorrect) System.out.println(作业提交成功!); else System.out.println(作业提交失败!);8.1.2 String类的常用方法 例8-7 字符串应用举例:统计周华健的朋友里面共出现了几次“朋友”。 8.1.2 String类的常用方法class Exam8_7 public static void main(String args) String s = 这些年一个人,风也过,雨也走,有过泪,有过错,+ 还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中。+ 朋友一生一起走,那些日子不
23、再有,一句话,一辈子,一生情,一杯酒。+ 朋友不曾孤单过,一声朋友你会懂,还有伤,还有痛,还要走,还有我。;int count = 0;do int index = s.indexOf(朋友);if (index != -1) count+;s = s.substring(index + 2); else break; while (s.length() = 2);System.out.println(count);8.1.3 String字符串与基本数据的相互转换 在Java语言中,借助于系统类库中的方法,可以实现String字符串和基本数据类型的相互转换,以实现不同类型数据的表示。 8.1
24、.3 String字符串与基本数据的相互转换1、字符串转换为基本数据类型 Java为每个基本类型都提供了包装类,这些包装类有:Byte、Short、Integer、Long、Float、Double、Character、Boolean,通过这些数值包装类,可以将字符串转换为基本数据类型,最常用的就是使用parseType()方法。如将字符串转换为int类型,可以使用int类型的数值包装类Integer的parseInt()方法,而若将字符串转换为double类型,则可以使用double类型的数值包装类Double的parseDouble()方法。 8.1.3 String字符串与基本数据的相互
25、转换例如:String s1=127;Byte.parseByte(s1); /字符串转换为byte整型数String s2=32767Short.parseShort(s2); /字符串转换为short整型数String s3=1234567890;Integer.parseInt(s3); /字符串转换为int整型数String s4=123.456;Float.parseFloat(s4); /字符串转换为float单精度数8.1.3 String字符串与基本数据的相互转换 例8-8 字符串转换为基本数据类型示例。8.1.3 String字符串与基本数据的相互转换class Exam8_
26、8 public static void main (String args) String s1=123; /创建基本数据类型值对应的字符串 String s2=1.23; String s3=true; int i=Integer.parseInt(s1); /将字符串转换为基本数据类型 double d=Double.parseDouble(s2); boolean b=Boolean.parseBoolean(s3); System.out.println(i%10=+(i%10); /基本数据类型参与运算 System.out.println(d+10=+(d+10); if(b=t
27、rue) System.out.println(the value of b is true!); else System.out.println(the value of b is false!); 8.1.3 String字符串与基本数据的相互转换2、基本数据类型转换为字符串 将基本数据类型转换为字符串有多种方法,可以使用String类的valueOf()方法,也可以使用数值包装类的toString()方法,还可以在基本数据类型的前面或后面连接上一个空字符串。8.1.3 String字符串与基本数据的相互转换例如:double pi=3.1415926;String s1=String.v
28、alueOf(pi);String s2=Double.toString(pi);String s3=+pi;进行转换后,s1、s2、s3都表示字符串3.1415926。8.1.3 String字符串与基本数据的相互转换例8-9基本数据类型转换为字符串示例。class Exam8_9 public static void main (String args) int i=123; String s1=String.valueOf(i); /将整型数据转换为字符串 float f=123.456f; String s2=Float.toString(f); boolean b=true; Str
29、ing s3=b+; System.out.println(s1=+s1); System.out.println(s2=+s2); System.out.println(s3=+s3); 8.1.4 String字符串与字符数组的相互转换在Java中,通过调用String类中的方法,可以实现字符串和字符数组的相互转换。常用的方法有:String(char c):String类的构造方法,用字符数组元素值创建String对象String valueOf(char data):返回字符数组参数的字符串表示形式String valueOf(char data,int offset,int coun
30、t):返回字符数组参数的特定子数组的字符串表示形式char toCharArray():将此字符串转换为一个新的字符数组。例如: String str=零壹贰叁肆伍陆柒捌玖拾; char c=str.toCharArray();将字符串str转换为字符数组后,str各个位置上的字符作为字符数组c中的数组元素值依次存储到了c0、c1、c10中。8.1.4 String字符串与字符数组的相互转换例8-10字符串与字符数组的转换示例。class Exam8_10 public static void main (String args) char c1=p,e,r,s,o,n; /创建字符数组并进行
31、初始化 char c2=s,t,u,d,e,n,t; char c3=new char4; /创建字符数组并设置元素个数 String s1,s2,s3; s1=new String(c1); /将字符数组转换为字符串 s2=String.valueOf(c2,3,4); s3=java; c3=s3.toCharArray(); /将字符串转换为字符数组 System.out.println(s1); /输出字符串的值 System.out.println(s2); for(int i=0;ic3.length;i+) /输出字符数组元素的值 System.out.print(c3i+ );
32、 8.1.5 String字符串数组同基本数据类型一样,String可以作为数组类型用于创建字符串数组,这时数组中的每个元素都是字符串对象,可以对每个数组元素进行字符串操作。例如: String str=new String10;数组str有10个元素,也就是说有10个字符串。每个字符串的内容要分别设定,所以每个元素(字符串)的长度可以是不同的。str0= Tom;str1= Jack;str2= Jordan;也可以在字符串数组声明的同时进行赋初值。 String str=Tom,Jack,Jordan,;与基本类型数据的数组不同的是,字符串数组的每个元素都是一个字符串,也就是每个元素都是引
33、用型变量,可以存放不同字符串的地址。 8.1.5 String字符串数组 例8-11 编程实现:将一个字符串数组中每个单词的首字母以大写形式表示。8.1.5 String字符串数组class Exam8_11public static void main (String args) String str=We,are,studying,java.; for(int i=0;istr.length;i+) /原样输出字符串数组元素的值 System.out.print(stri+ ); System.out.println(); for(int i=0;istr.length;i+) char
34、c=stri.charAt(0); /获取每个字符串数组元素的首字符 if(Character.isLowerCase(c) /判断首字符的大小写情况 System.out.print(char)(c-32); else System.out.print(c); for(int j=1;jstri.length();j+) /输出数组元素首字母后的其它字符 System.out.print(stri.charAt(j); System.out.print( ); 8.2 StringBuffer类 String类是字符串常量,是不可更改的常量,只要一个字符串被改变了,就必须隐含或者显式地创建一
35、个新的String对象来表示。而StringBuffer类是字符串变量,它的对象是可以改变的,可以通过对字符的插入、追加和删除等操作而使得字符串发生改变。8.2.1 StringBuffer类的创建 用StringBuffer类创建字符串变量的过程与String类对象的创建过程极其相似。可以通过掉调用StringBuffer类的构造方法来实现。其构造方法有以下四种形式: StringBuffer():构造一个不带字符的字符串缓冲区,其初始容量为16个字符。 StringBuffer(CharSequence seq):构造一个字符串缓冲区,它包含与指定的CharSequence相同的字符 St
36、ringBuffer(int capacity):构造一个不带字符但具有指定初始容量的字符串缓冲区。 StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。 8.2.1 StringBuffer类的创建例如: StringBuffer s1=new StringBuffer(); /分配16字节的字符缓冲区 StringBuffer s2=new StringBuffer(32); /分配32字节的字符缓冲区 StringBuffer s3=new StringBuffer(student); /在字符缓冲区存放串student,另外,后面
37、预留16字节的空缓冲区注意:每个StringBuffer对象都有一个容量,只要其字符序列的长度不超过其容量,就无需分配新的内部缓冲数组;如果内部缓冲数组溢出,StringBuffer对象的容量将自动增大。 8.2.2 StringBuffer类的常用方法 对字符串变量的操作是通过StringBuffer类提供的方法实现的。StringBuffer类提供了很多对字符串变量进行访问的方法,同时还提供了用于对字符串变量进行修改和扩充的方法。 8.2.2 StringBuffer类的常用方法 下面介绍几种StringBuffer类常用的字符串操作方法: 1、字符串的访问方法 int capacity(
38、):返回当前容量。 char charAt(int index):返回次序列指定索引处的char值。 int indexOf(String str):返回第一次出现的指定子字符串在该字符串中的索引。 int indexOf(String str,int fromIndex):从指定的索引处开始,返回第一次出现的指定子字符串在该串中的索引。 int lastIndexOf(String str):返回最右边出现的指定子字符串在此字符串中的索引。8.2.2 StringBuffer类的常用方法 int lastIndexOf(String str,int fromIndex):从指定的索引处开始进
39、行后向搜素,返回在此字符串中最后一次出现的指定子字符串的索引。 int length():返回长度(字符数) String substring(int start):返回一个新的 String,它包含此字符序列当前所包含的字符子序列。 String substring(int start,int end):返回一个新的 String,它包含此字符序列当前所包含的字符子序列。 String toString():返回此序列中数据的字符串表示形式。8.2.2 StringBuffer类的常用方法例8-12 StringBuffer访问方法示例。class Exam8_12 public stati
40、c void main (String args) StringBuffer s1=new StringBuffer(How do you do?); int capacity,len; /声明变量,分别表示容量和长度 capacity=s1.capacity(); len=s1.length(); int index1,index2; /表示子串的位置 index1=s1.indexOf(do); index2=s1.lastIndexOf(do); String s2; s2=s1.substring(7,10); System.out.println(字符串变量的容量为:+capacit
41、y+,长度为:+len); System.out.println(子串do第一次出现位置为:+index1+,最后一次出现位置为:+index2); System.out.println(从索引位置为7的字符开始,取串长为3的子串,结果为:+s2); 8.2.2 StringBuffer类的常用方法 2、字符串的修改方法 StringBuffer append(String str):将指定的字符串追加到此序列。 StringBuffer delete(int start,int end):移除此序列的子字符串中的字符。 StringBuffer deleteCharAt(int index)
42、:移除此序列指定位置的char。 StringBuffer insert(int offset,char c):将char参数的字符表示形式插入此序列中。 StringBuffer insert(int offset,String str):将字符串插入此序列中。 StringBuffer replace(int start,int end,String str):使用给定String中的字符替换此序列的子字符串中的字符。 StringBuffer reverse():将此字符序列用其反转形式取代。 void setCharAt(int index,char ch):将给定所引出的字符设置为c
43、h。8.2.2 StringBuffer类的常用方法例8-13 StringBuffer修改方法示例。class Exam8_13 public static void main (String args) StringBuffer s1=new StringBuffer(); /创建StringBuffer类的对象并实例化 s1.append(we ); /通过append()方法实现追加操作 s1.append(study ); s1.append(java!); System.out.println(s1); s1.insert(3,are ); /在指定位置进行插入操作 System.
44、out.println(s1); s1.replace(7,12,studying); /将指定区域的子串进行替换 System.out.println(s1); s1.delete(7,21); /删除子串 s1.append(student!); System.out.println(s1); 8.2.3 String字符串与StringBuffer字符串的区别 String字符串和StringBuffer字符串是java语言中常用的两种字符串表示形式。其中String类是不可变类,它的对象表示字符串常量,任何对String对象的改变都会引发新的String对象的生成,也就是说对于已经存在
45、的String对象的修改都是通过重新创建一个新的对象,然后把新的值保存进去。 StringBuffer则是可变类,它的对象用于表示字符串变量,任何对它所指代的字符串的改变都不会产生新的对象,所创建的StringBuffer对象的实体的内存空间的大小、内容可以自由改变。因此,当对它进行修改的时候不会像String那样重新建立对象,修改操作是对StringBuffer对象自身进行的,对象将继续使用原来的内存空间,不会重新分配,只是空间大小发生了变化。 8.2.3 String字符串与StringBuffer字符串的区别例如: String s1=abc; s1+=123;s1原来存放的是字符串abc的地址,进行操作s1+=123后,使得字符串abc和123连接形成新的字符串abc123,而此时s1重新指向新得到的字符串,保存新串abc123的地址。原来的字符串对象abc由于不再使用而被系统收回。而StringBuffer s1=new StringBuffer(abc); s1.append(123);字符串对象s1原来的值为abc,经过追加操作后变为abc123,但由于追加操作是在s1原来所指向的空间进行的,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《调督安神法走罐治疗慢性失眠的临床研究》
- 陕西省石油化工工业贸易有限公司招聘笔试真题2023
- 个体户签订劳动合同范文
- 二零二四年度彩钢瓦施工项目质量保证与验收合同
- 投资淘宝合同范本
- 2024年度教育培训项目代理合同
- 2024年度网络安全防护与应急处置合同
- 卸货合同范本
- 2024全新买车合同协议书下载
- 2024年度地质勘探沉降观测合同范本
- 违规收受红包礼金自查自纠报告范文六篇
- 24.1.4-圆周角-第1课时说课课件-
- (正式版)SH∕T 3507-2024 石油化工钢结构工程施工及验收规范
- 血液灌流及血浆置换在急重症领域的应用
- 成品烟道安装施工方案
- 车库委托出售协议书
- 《路遥人生》读书分享课件
- 音乐家海顿课件
- 企业公司合作方案
- 起重机安装安全协议书
- 早产临床防治指南(2024版)解读
评论
0/150
提交评论