[工学]第7章 字符串.ppt_第1页
[工学]第7章 字符串.ppt_第2页
[工学]第7章 字符串.ppt_第3页
[工学]第7章 字符串.ppt_第4页
[工学]第7章 字符串.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、Object-oriented programming JavaJava编程技术编程技术 辽宁工程技术大学软件学院辽宁工程技术大学软件学院 JavaJava程序设计实践教程程序设计实践教程 第七章第七章 字符串字符串 第七章第七章 字符串字符串 lString类类 lStringBuffer类类 l基础数据类型的包装类基础数据类型的包装类 String类类 lString是一个是一个非可变类非可变类(immutable)。)。 l简单说来,非可变类的简单说来,非可变类的实例是实例是不能被修改不能被修改的,每个的,每个 实例中包含的信息都必须在该实例实例中包含的信息都必须在该实例创建创建的时候就

2、提的时候就提 供出来,并且在对象的整个供出来,并且在对象的整个生存周期内固定不变生存周期内固定不变。 l非可变类确实有着自身的非可变类确实有着自身的优势优势: l状态单一,对象简单,便于维护。状态单一,对象简单,便于维护。 l该类对象对象本质上是线程安全的,不要求同步。该类对象对象本质上是线程安全的,不要求同步。 l用户可以共享非可变对象,甚至可以共享它们的内用户可以共享非可变对象,甚至可以共享它们的内 部信息。部信息。 lString类在类在java中被大量运用,甚至在中被大量运用,甚至在class文件中文件中 都有其身影,因此将其设计为简单轻便的非可变类都有其身影,因此将其设计为简单轻便的

3、非可变类 是比较合适的。是比较合适的。 String类类 l创建一个创建一个String对象,主要就有以下两种方对象,主要就有以下两种方 式:式: String str1 = new String(abc); String str2 = abc; l虽然两个语句都是虽然两个语句都是返回一个返回一个String对象的引对象的引 用用,但是,但是JVM对两者的处理方式是不一样对两者的处理方式是不一样 的。的。 l例:例:Pool.java l字符串池(字符串池(String Pool) l在在JAVA虚拟机(虚拟机(JVM)中存在着一个)中存在着一个字符串字符串 池池,其中保存着很多,其中保存着很

4、多String对象对象,并且可以被,并且可以被 共享共享使用,因此它提高了效率。使用,因此它提高了效率。 l由于由于String类是类是final的,的,它的值一经创建就不它的值一经创建就不 可改变,因此我们不用担心可改变,因此我们不用担心String对象共享而对象共享而 带来程序的混乱带来程序的混乱。 l字符串池由字符串池由String类维护,我们可以调用类维护,我们可以调用 intern()方法来访问字符串池。方法来访问字符串池。 String类类 String类类 lJVM处理方式处理方式 l第一种,第一种,JVM会马上在会马上在堆内存堆内存中创建一个中创建一个String 对象对象,然

5、后将该,然后将该对象的引用对象的引用返回给用户。返回给用户。 l第二种,第二种,JAVA虚拟机首先在虚拟机首先在字符串池字符串池中查找是中查找是 否已经存在了值为否已经存在了值为“abc”的这么一个对象,它的的这么一个对象,它的 判断依据是判断依据是String类类equals(Object obj)方法的返方法的返 回值。回值。 l如果有如果有,则不再创建新的对象,直接返回已存,则不再创建新的对象,直接返回已存 在对象的引用;在对象的引用; l如果没有如果没有,则先创建这个对象,然后把它加入,则先创建这个对象,然后把它加入 到字符串池中,再将它的引用返回。到字符串池中,再将它的引用返回。 S

6、tring类类 lJava.lang.String类代表类代表不可变的不可变的字符序列字符序列。 l“xxxx”为该类的一个对象。为该类的一个对象。 lString类的常见类的常见构造方法构造方法: lString(String original) l创建一个创建一个String对象为对象为original的拷贝。的拷贝。 lString(char value) l用一个字符数组创建一个用一个字符数组创建一个String对象。对象。 lString(char value, int offset, int count) l用一个字符数组从用一个字符数组从offset项开始的项开始的count个字

7、个字 符序列创建一个符序列创建一个String对象。对象。 public class Test public static void main(String args) String s1 = “hello”; String s2 = “world”; String s3 = “hello”; System.out.println(s1 = s3); s1 = new String(“hello”); s2 = new String(“hello”); System.out.println(s1 = s2); System.out.println(s1.equals(s2); char c =

8、 s, u, n, , j, a, v, a; String s4 = new String(c); String s5 = new String(c,4,4); System.out.println(s4); System.out.println(s5); String类举例(类举例(1) /true /false /true /sun java /java String类常用方法(类常用方法(1) lpublic char charAt(int index) l返回字符串中第返回字符串中第index个字符个字符 lpublic int length() l返回字符串的长度返回字符串的长度

9、lpublic int indexOf(String str) l返回字符串中出现返回字符串中出现str的第一个位置的第一个位置 lpublic int indexOf(String str,int fromIndex) l返回字符串中从返回字符串中从fromIndex开始出现开始出现str的第一个位置的第一个位置 lpublic boolean equalsIgnoreCase(String another) l比较字符串与比较字符串与another是否一样是否一样(忽略大小写忽略大小写) lpublic String replace(char oldChar, char newChar)

10、l在字符串中用在字符串中用newChar字符替换字符替换oldChar字符字符 public class Test public static void main(String args) String s1 = “sun java”, s2 = “Sun Java”; System.out.println(s1.charAt(1); System.out.println(s1.length(); System.out.println(s1.indexOf(“java”); System.out.println(s1.indexOf(“Java”); System.out.println(s1

11、.equals(s2); System.out.println(s1.equalsIgnoreCase(s2); String s = “我是程序员,我在学我是程序员,我在学java”; String sr = s.replace(我我, 你你); System.out.println(sr); String类举例(类举例(2) /u /8 /4 /-1 /false /true /你是程序员,你在学你是程序员,你在学java String类常用方法(类常用方法(2) lpublic boolean startsWith(String prefix) l判断字符串是否以判断字符串是否以pref

12、ix字符串开头字符串开头 lpublic boolean endsWith(String suffix) l判断字符串是否以判断字符串是否以prefix字符串结尾字符串结尾 lpublic String toUpperCase() l返回一个字符串为该字符串的大写形式返回一个字符串为该字符串的大写形式 lpublic String toLowerCase() l返回一个字符串为该字符串的小写形式返回一个字符串为该字符串的小写形式 lpublic String substring(int beginIndex) l返回该字符串从返回该字符串从beginIndex开始到结尾的子字符串开始到结尾的子

13、字符串 lpublic String substring(int beginIndex,int endIndex) l返回该字符串从返回该字符串从beginIndex开始到开始到endIndex-1结尾的子串结尾的子串 lpublic String trim() l返回将该字符串去掉开头和结尾空格后的字符串返回将该字符串去掉开头和结尾空格后的字符串 String类举例(类举例(3)public class Test public static void main(String args) String s = “Welcome to Java World!”; String s1 = “ su

14、n java ”; System.out.println(s.startsWith(“Welcome”); System.out.println(s.endsWith(“World”); String sL = s.toLowerCase(); String sU = s.toUpperCase(); System.out.println(sL); System.out.println(sU); String subS = s.substring(11); System.out.println(subS); subS = s.substring(11, 12); System.out.prin

15、tln(subS); String st = s1.trim(); System.out.println(st); /true /welcome to java world! /WELCOME TO JAVA WORLD! /Java World! /false /sun java /J String类常用方法(类常用方法(3) l静态重载方法静态重载方法 lpublic static String valueOf()可以将基可以将基 本类型数据转换为字符串,例如:本类型数据转换为字符串,例如: public static String valueOf(double d) public sta

16、tic String valueOf(int i) l方法方法public String split(String regex)可以将可以将 一个字符串按照指定的分隔符分隔,返回分一个字符串按照指定的分隔符分隔,返回分 隔后的隔后的字符串数组字符串数组。 public class Test public static void main(String args) int j = 1234567; String sNumber = String.valueOf(j); System.out.println(“j是”+sNumber.length()+“位数。 ”); String s = “Ma

17、ry,F,1976”; String sp = s.split(“,”); for(int i=0;isp.length;i+) System.out.println(spi); String类举例(类举例(4) 输出结果:输出结果:j是是7位数。位数。 Mary F 1976 lcompareTo()方法方法 l形式:形式:public int compareTo(String anotherString) l返回值:返回值: l字符不同,返回第一个不同字符之间的差值字符不同,返回第一个不同字符之间的差值 (Unicode码)码) this.charAt(k)-anotherString.c

18、harAt(k) l字符相同长度不同,返回两个字符串的长度之差字符相同长度不同,返回两个字符串的长度之差 this.length()-anotherString.length() lcompareTo只有在方法只有在方法equals(Object obj)返回返回true时时 才返回才返回0。 String对象的比较对象的比较 String s1 = “abcdef”; String s2 = “abcedfg”; pareTo(s2); String s1 = “String”; String s2 = “StringBuffer”; pareTo(s2); String s1 = “hel

19、lo”; String s2 = “hello”; pareTo(s2); 练习练习 1、编写一个程序,输出一个字符串中、编写一个程序,输出一个字符串中 的大写英文字母数,小写英文字母数的大写英文字母数,小写英文字母数 以及非英文字母数。以及非英文字母数。 2、编写一个方法,输出一个字符串中、编写一个方法,输出一个字符串中 指定字符串出现的次数。指定字符串出现的次数。 StringBuffer类类 ljava.lang.StringBuffer代表代表可变可变的字符序列的字符序列。 lStringBuffer和和String类似,但类似,但StringBuffer可以可以 对其字符串进行改变。

20、对其字符串进行改变。 lStringBuffer类的常见类的常见构造方法构造方法: lStringBuffer() l创建一个不包含字符序列的空的创建一个不包含字符序列的空的StringBuffer 对象。对象。 lStringBuffer(String str) l创建一个创建一个StringBuffer对象,包含与对象,包含与String对对 象象str相同的字符序列。相同的字符序列。 StringBuffer常用方法(常用方法(1) l重载方法重载方法public StringBuffer append() l可为该可为该StringBuffer对象添加字符序列,对象添加字符序列,返回返

21、回 添加后的该添加后的该StringBuffer对象引用对象引用,例如:,例如: lpublic StringBuffer append(String str) lpublic StringBuffer append(StringBuffer sbuf) lpublic StringBuffer append(char str) lpublic StringBuffer append(char str,int offset,int len) lpublic StringBuffer append(double d) lpublic StringBuffer append(Object obj)

22、 l StringBuffer常用方法(常用方法(2) l重载方法重载方法public StringBuffer insert()可以为可以为 该该StringBuffer对象在指定位置插入字符序列,对象在指定位置插入字符序列, 返回修改后的该返回修改后的该StringBuffer对象引用对象引用,例如:,例如: lpublic StringBuffer insert(int offset,String str) lpublic StringBuffer insert(int offset,double d) l l方法方法public StringBuffer delete(int star

23、t,int end) 可以删除从可以删除从start开始到开始到end-1为止的一段字符序为止的一段字符序 列,列,返回修改后的该返回修改后的该StringBuffer对象引用对象引用。 StringBuffer常用方法(常用方法(3) l和和String类含义类含义类似类似的方法:的方法: lpublic int indexOf(String str) lpublic int indexOf(String str,int fromIndex) lpublic String substring(int start) lpublic String substring(int start,int

24、end) lpublic int length() l方法方法public StringBuffer reverse()用于将字符用于将字符 序列逆序,序列逆序,返回修改后的该返回修改后的该StringBuffer对象对象 引用引用。 public class Test public static void main(String args) String s = “Microsoft”; char c = a, b, c; StringBuffer sb1 = new StringBuffer(s); sb1.append(/).append(“IBM”).append(/).append(

25、“Sun”); System.out.println(sb1); StringBuffer sb2 = new StringBuffer(“数字数字”); for(int i=0;i=9;i+) sb2.append(i); System.out.println(sb2); sb2.delete(8,sb2.length().insert(0,c); System.out.println(sb2); System.out.println(sb2.reverse(); StringBuffer类举例类举例 输出结果:输出结果: Microsoft/IBM/Sun 数字数字0123456789 a

26、bc数字数字012345 543210字数字数cba l使用使用StringBuffer主要就是在主要就是在性能性能上的考虑。上的考虑。 lString是一种非常常用的数据类型,但由于是一种非常常用的数据类型,但由于 String是是不可变对象不可变对象,在进行,在进行String的相关操的相关操 作的时候会产生许多作的时候会产生许多临时的临时的String对象对象。 l而而StringBuffer在操作上是在一个在操作上是在一个缓冲缓冲中进行中进行 的,性能当然优越得多。的,性能当然优越得多。 l不过,一般做为简单的字符串传递和其它操不过,一般做为简单的字符串传递和其它操 作,只不要改变字符

27、串内容的操作,用作,只不要改变字符串内容的操作,用String 效率会高一些。效率会高一些。 String str1 = hello; String str2 = world; str1 = str1 + str2; String类与类与StringBuffer类比较类比较 /这里所做的内部操作,其实不是把这里所做的内部操作,其实不是把str1的内容改变的内容改变 为原为原str1+str2的内容这么简单,而把创建一个新的的内容这么简单,而把创建一个新的 String,内容为,内容为str1 + str2的内容,然后再把的内容,然后再把str1这这 个引用重新指向新创建的个引用重新指向新创建的

28、String,这就是上面说的,这就是上面说的 String不可变。不可变。 /而如果是而如果是StringBuffer的话,则直接更改的话,则直接更改str1的内的内 容,而不是先创建一个新的容,而不是先创建一个新的StringBuffer。 基本数据类型包装类基本数据类型包装类 l包装类(如:包装类(如:Integer,Double等)这些类封等)这些类封 装了一个相应的基本数值,并为其提供了一装了一个相应的基本数值,并为其提供了一 系列操作。系列操作。 l以以java.lang.Integer类为例,类为例,构造方法构造方法: lInteger(int value) lInteger(St

29、ring s) 包装类常见方法包装类常见方法 l以下方法以以下方法以java.lang.Integer为例为例 方法方法说明说明 public long longValue()返回封装数据的返回封装数据的longlong型值型值 public double doubleValue()返回封装数据的返回封装数据的doubledouble型值型值 pulbic int intValue()返回封装数据的返回封装数据的intint型值型值 public static int parseInt(String s) throws NumberFormatException 将字符串解析成将字符串解析成i

30、ntint型数据,型数据, 返回该数据返回该数据 public static Integer valueOf(String s) throws NumberFormatException 返回返回IntegerInteger对象,其中封装对象,其中封装 的整形数据为字符串的整形数据为字符串s s所表示所表示 包装类举例包装类举例 public class Test public static void main(String args) Integer i = new Integer(100); Double d = new Double(“123.456”); int j = Va

31、lue()+Value(); float f = i.floatValue()+d.floatValue(); System.out.println(j);System.out.println(f); double pi = Double.parseDouble(“3.14159”); double r = Double.valueOf(“2.0”).doubleValue(); double s = pi*r*r; System.out.println(s); try int k = Integer.parseInt(“1.25”); catch(NumberFormatExcep

32、tion e) System.out.println(“数据格式不对!”); System.out.println(Integer.toBinaryString(123)+”B”); System.out.println(Integer.toHexString(123)+”H”); System.out.println(Integer.toOctalString(123)+”O”); Date类类 在在JavaJava中获取当前时间,可以通过多个中获取当前时间,可以通过多个 类来完成,如使用类来完成,如使用java.util.Datejava.util.Date、 java.sql.Datej

33、ava.sql.Date和和java.util.Calendarjava.util.Calendar类。类。 java.util.Datejava.util.Date类来对日期和时间的系统信类来对日期和时间的系统信 息进行封装,息进行封装,java.sql.Datejava.sql.Date是是sqlsql包对时间包对时间 的封装,的封装,java.util.Calendarjava.util.Calendar类将根据默认类将根据默认 的日历系统来解释的日历系统来解释DateDate对象。本节将主要介对象。本节将主要介 绍绍java.util.Datejava.util.Date和和java.

34、util.Calendarjava.util.Calendar类类 。 Date类类 DateDate类有两个构造函数,如下所示:类有两个构造函数,如下所示: l Date()Date() 使用使用DateDate类的无参数构造方法创建的对象可以获取本地当前时类的无参数构造方法创建的对象可以获取本地当前时 间。间。DateDate对象表示时间的默认顺序是星期、月、日、小时、分、对象表示时间的默认顺序是星期、月、日、小时、分、 秒、年。秒、年。 lDate(longDate(long date) date) 第二个构造方法中的参数表示自从标准基准时间(称为第二个构造方法中的参数表示自从标准基准时

35、间(称为“历元历元 (epochepoch)”,即,即19701970年年1 1月月1 1日日00:00:00 GMT00:00:00 GMT)以来的指定毫)以来的指定毫 秒数。秒数。 DateDate常用方法见示例:常用方法见示例:DateDemo.javaDateDemo.java Calendar类类 l CalendarCalendar类是一个抽象类,它为特定瞬间与一组诸如类是一个抽象类,它为特定瞬间与一组诸如 YEARYEAR、MONTHMONTH、DAY_OF_MONTHDAY_OF_MONTH、HOURHOUR等日历字段之间的等日历字段之间的 转换提供了一些方法,并为操作日历字段

36、(例如获得下转换提供了一些方法,并为操作日历字段(例如获得下 星期的日期)提供了一些方法。瞬间可用毫秒值来表示,星期的日期)提供了一些方法。瞬间可用毫秒值来表示, 它是距历元(即格林威治标准时间它是距历元(即格林威治标准时间19701970年年1 1月月1 1日的日的 00:00:00.00000:00:00.000,格里高利历)的偏移量。,格里高利历)的偏移量。 Calendar类类 l CalendarCalendar类还为实现包范围外的具体日历系统提供了其类还为实现包范围外的具体日历系统提供了其 他字段和方法。这些字段和方法被定义为他字段和方法。这些字段和方法被定义为protectedprotected。 与其他语言环境敏感类一样,与其他语言环境敏感类一样,Calendar Calendar 提供了一个类提供了一个类 方法方法getInstancegetInstance,以

温馨提示

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

评论

0/150

提交评论