




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
常用使用类常用实用类9.1String 类Java的字符串类型是String类型,它不是基本数据类型,而是Java所特有的类型类,String既可以用于字符串数据的存储,同时也提供多种字符串操作方法,如startsWith()、endsWith()、regionMatches()、charAt()、compareTo()、indexOf()、substring()、contains()等9.1.1String对象的隐式创建和显式创建的区别Java的字符串数据是使用String对象来进行存储的,String对象可以通过赋值语句或者new进行创建。所不同的是使用赋值语句创建String对象叫做隐式创建法,而使用new的方式创建String对象的方式叫做显式创建方法,两种方法如下:String aStr1=“This is a string”; /隐式创建String aStr2=new String(This is a string);/显式创建String对象的两种创建方式在内存存储机制上是有区别的:String对象的显式创建,每次都为存储的字符串分配独立的内存空间以创建新的对象,即有几个new就有几个独立的String对象。而隐式创建则采用了一种更加节省内存的方式,即如果内存中已经拥有内容相同的String对象时,则运行器在String对象进行隐式创建时不再分配内存以创建新的对象,而是使这个String对象的引用与前一个内容相同的对象共享一个字符串对象空间,即使用之前已经存在的这个String对象。我们把这种方式称之为共享模式、而使用new创建不同对象的方式称之为非共享模式。从图中我们不难发现在共享模式下aStr对象和bStr对象共同使用一个String对象的内存空间,而在非共享模式下,虽然aStr对象和bStr对象中的字符串内容一致,但是其使用的是不同的String对象的内存空间。9.1.2= 和 equals()一般情况下,对两个数据内容的比较使用“=”运算符,但是在Java对象的比较中使用“=”却有着另外含义,即“=”比较的是字符串对象所保存的内存空间的地址、也可以说是判断两个字符串对象是否使用同一个内存空间来保存数据。而如果要判断两个字符串对象的内容是否相同,即使它们不是同一个String对象的内存空间时,我们就需要使用equals()进行判断了。boolean equals(ObjectanObject) /将此字符串与指定的对象比较。示例1package edu.learn;public class Example9_1 public static void main(String args) String s1,s2; /显式创建,为每一个对象分配独立内存空间 s1=new String(we are students); s2=new String(we are students); System.out.println(比较s1和s2的内容:+s1.equals(s2); /输出结果是:true System.out.println(比较s1和s2的地址:+(s1=s2); /输出结果是:false String s3,s4; /隐式创建,由于内容相同,因此只创建一个地址空间 s3=how are you; s4=how are you; System.out.println(比较s1和s2的内容:+s3.equals(s4); /输出结果是:trueSystem.out.println(比较s1和s2的地址:+(s3=s4); /输出结果是:true 运行结果:9.1.2字符串的比对 startsWith()、endsWith()和regionMatches()startsWith()和endsWith()用于测试此字符串是否以指定的前缀开始,或者以后缀结束,而regionMatches()则是测试两个字符串区域是否相等。它们都是字符串的比对方法,不过以上比对只能返回比对成功或者是失败,不能返回字符串中比对成功的子串数量和位置。以下示例是判断字符串数组中保存的身份证以530作为开头身份证号码的数量,另外一个则是判断字符串中出现en的数量。由于不能返回数量,因此需要使用循环和计数器。示例2package edu.learn;public class Example9_2 public static void main(String args) String id = 53011198902280308,52011198711038269,53011197701328291;int number=0; for(int i=0;i3;i+)if(idi.startsWith(530)= true)number+;System.out.println(前面3个字符为530的身份证有:+number+个); /输出结果为number=2number = 0; String s=student;entropy;engage,english,client; for(int k=0;ks.length();k+) if(s.regionMatches(k,en,0,2) number+; System.out.println(含有en子串的字符串的总数有:+number); /输出结果为number=59.1.3字符串转换为数字类型字符串可以转换为基本数字类型,使用的方法是各种数字类型封装类的parseXXX()方法。字符串转换为int: int Integer.parseInt(String s)字符串转换为long: long Long.parseLong(String s)字符串转换为float: float Float.parseFloat(String s)字符串转换为double:doube Double.parseDouble(String s)以下示例为用户输入一个代表某整数的字符串,将该字符串转换后得到对应的整数,利用该整数获得乘积后进行输入。代码如下:示例3package edu.learn;import java.util.*;public class Example9_4 public static void main(String args)String s;int count,sum=1;Scanner input = new Scanner(System.in); try s = input.nextLine(); /获得字符串count = Integer.parseInt(s); /将字符串转换为数字类型 for(int i=1;icount;i+) sum *= i; System.out.println(count+的乘积 = +sum); catch(NumberFormatException e) System.out.println(您键入了非数字字符:+e); 9.1.4符串中的子串定位和子串的获取indexOf()和substring()我们经常需要对字符串进行分析和提取相关有用的数据,此时可以使用String类型中的两个成员方法:indexOf()和subString(),两方法的具体原型如下:indexOf(Stringstr) 返回指定字符在此字符串中第一次出现处的索引。indexOf(Stringstr, intfromIndex) 返回在此字符串中第一次出现指定字符处的索,搜索位置从字符串的fromIndex开始搜索。substring(intbeginIndex) 返回一个从字符串的beginIndex位置开始的子串。substring(intbeginIndex, intendIndex) 返回一个从字符串的beginIndex位置开始,到endIndex结束的子串。以下示例是从一个文件全路径的字符串中解析出目录和文件名的代码, 代码中每次都需要使用indexOf()获得前后两个的位置,然后使用substring()来获取它们之间的子串。示例4package edu.learn;public class Example9_3 public static void main(String args) / 字符串中的实际上是一个,因为第一是转义字符 String path=c:bookjavabookxml.doc; String file; int startIndex,endIndex; System.out.println( 原来的字符串:+path); /获得第一个的位置 startIndex=path.indexOf(); System.out.println( startIndex=+startIndex); /获得第二个的位置 endIndex=path.indexOf(,startIndex+1); System.out.println( endIndex=+startIndex); /取两个中间的目录名 file = path.substring(startIndex+1,endIndex); System.out.println( 目录或文件名为:+file); /输出结果是:book startIndex = endIndex; System.out.println( startIndex=+startIndex); endIndex = path.indexOf(,startIndex+1); / +1的目的是要把第一个排除 System.out.println( endIndex=+startIndex); /取两个中间的目录名 file = path.substring(startIndex+1,endIndex); System.out.println( 目录或文件名为:+file); /输出结果是:javabook startIndex=path.lastIndexOf(); /检索的方向从后面开始 file=path.substring(startIndex+1); System.out.println( 目录或文件名为:+file); /输出结果是:xml.doc运行结果:9.2 StringBuffer在Java中,StringBuffer是String类的一种补充,它们都是用于做字符串处理的类型,但是它们之间又是拥有区别的,String类是不可改变的,如果你更改了String类的对象,那么以前的就“不存在了”,所指向的是一个新的实例。而StringBuffer类型则不会创建新的类对象,当需要修改一个StringBuffer类型对象的内容时,它会在现有内存基础上进行内存的扩容,然后再通过append()方法实现新内容的修改和链接操作。因此如果在程序中需要对字符串进行频繁的修改连接操作的话.使用StringBuffer性能会更高。StringBuffer在每次修改内容时都会根据需要扩充其容量,我们可以使用length()来获得新字符串的长度,以及capacity()获得当前字符串的可用容量。以下示例中正是反映了这一特点,代码如下:示例 5package edu.learn;public class Example9_6 public static void main(String args) StringBuffer str=new StringBuffer(); str.append(大家好); System.out.println(str:+str); System.out.println(length:+str.length(); System.out.println(capacity:+str.capacity(); str.append(我们大家都很愿意学习Java语言); System.out.println(str:+str); System.out.println(length:+str.length(); System.out.println(capacity:+str.capacity(); StringBuffer sb=new StringBuffer(Hello); System.out.println(length:+sb.length(); System.out.println(capacity:+sb.capacity(); StringBuffer类除了在内存分配、使用和效率方面与String类型不同外,String类型中的所有操作函数在StringBuffer类型中都有。在Java语言发展至今,越来越多的程序员选择使用StringBuffer来替代String做字符串的处理操作。9.3 Date时间类Java要获取日期和时间,需要使用能存储时间,以及提供获取时间和操作时间的类型,Date是Java1.1版本以前用以获得时间和存储时间的类型。利用Date来获得当前日期和时间的方法是使用new来创建Date的对象。虽然Date对象可以获得并存储日期和时间内容,但是它不能将日期和时间中的年、月、日、小时、分钟、秒分别获取出来。因为该类型的getYear()、getMonth()、getDay()、getHour()、getMinute()和getSecond()方法已经过期,在1.1版本后将使用Calendar类来替代。想要通过Date来输出时间需要使用SimpleDateFormat来格式化时间进行输出的。以下示例使用Date类来获得当前日期和时间,并使用SimpleDateFormat来格式化不同的时间格式来进行输出。代码如下:示例6package edu.learn;import java.util.Date;import java.text.SimpleDateFormat;public class Example9_7 public static void main(String args) Date nowTime=new Date(); System.out.println(现在的时间:+nowTime); /使用日期格式化对象来设置日期格式化 /设置日期格式化模板 SimpleDateFormat matter1= new SimpleDateFormat( Now Time: y年M月d日H时m分s秒); /运用模板来输出时间格式化字符串 String timePattern=matter1.format(nowTime); System.out.println(timePattern); SimpleDateFormat matter2= new SimpleDateFormat(G yyyy年MMMd日E HH时mm分ss秒z); timePattern=matter2.format(nowTime); System.out.println(timePattern); 9.4 Calendar类Calendar类是1.1版本后用于操作时间的类型。它提供了很多方法用于设置和获取时间的方法。static Calendar getInstance() 静态方法,用于创建一个Calendar类型的对象setTime(Date d) 用于使用Date类型的对象来设置当前日期和时间设置当前Calendar对象的日期和时间的值set(intyear, intmonth, intdate)set(intyear, intmonth, intdate, inthourOfDay, intminute)set(intyear, intmonth, intdate, inthourOfDay, intminute, intsecond)get(intfield) 返回给定日历字段的值其中属于field的日期和时间关键字如下YEAR指示年MONTH指示月份,月份一般从0开始,因此得到的结果为1,实际上指的是2月WEEK_OF_YEAR当前年中的星期数,如一年中第一个星期的值为 1WEEK_OF_MONTH指示当前月中的星期数,如一个月中第一个星期的值为 1DATE指示当前月中的第几天,与DAY_OF_MONTH用法相同。DAY_OF_MONTH指示当前月中的第几天,与DAY_OF_MONTH用法相同。DAY_OF_WEEK示一个星期中的第几天,周日是1,周一是2,周二是3,以此类推AM_PM指示 HOUR 是在中午之前还是在中午之后。HOUR指示小时,为12小时制HOUR_OF_DAY指示小时,为24小时制MINUTE指示小时内的分钟,60分钟制SECOND指示一分钟中的秒以下是一个获得保存当前日期和时间的Calendar对象并得到年、月、日、星期、小时、分钟、秒等具体数据的代码,其中“/”注释的代码为为Calendar对象指定一个日期和时间。代码如下:示例7package edu.learn;import java.util.*;import static java.util.Calendar.*; /静态导入Calendar类的静态常量public class Example9_8 public static void main(String args) /以下程序将显示有关当前的年、月、日、星期、小时、分和秒的时间信息 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date(); /用户设计所需要的日期 /calendar.set(2011,(6-1),11); /6月份的值要-1才能代表6月 int year,month,day,dayOfWeek,weekth,hour,minute,second; year = calendar.get(YEAR); month = calendar.get(MONTH); day = calendar.get(DATE); weekth = calendar.get(WEEK_OF_MONTH); dayOfWeek = calendar.get(DAY_OF_WEEK); hour = calendar.get(HOUR_OF_DAY); minute = calendar.get(MINUTE); second = calendar.get(SECOND); System.out.println(年:+year); /月从0开始计算,因此要加1才是正确的月份 System.out.println(月:+ (month+1); System.out.println(日:+ (day); System.out.println(第 + weekth + 周); /星期日为1,星期一为2,因此实际的星期几,应该是dayOfWeek-1 System.out.println(星期 + (dayOfWeek-1); System.ou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高级会计实务试题及答案
- 肿瘤靶向药管理办法
- 社会团体管理办法
- pdca企业管理办法
- 老旧散小区管理办法
- 箱包厂管理办法规定
- 规范监狱资产管理办法
- 贸易交通走廊管理办法
- 不良事件资料管理办法
- 自动化物料管理办法
- 食品样品的采集和预处理-食品样品的采集与制备
- 昆明元朔建设有限公司高速收费岗位笔试题
- 《哲学与人生》 课程标准
- 发展汉语初级口语I-第15课课件
- Unit2Grammarfocus4C语法讲解课件人教版英语九年级全册
- 住宅大门经典对联带横批100条-最佳大门风水对联
- SWITCH暗黑破坏神3超级金手指修改 版本号:2.7.4.84040
- 生产安全事故应急预案评审会议纪要范文
- 三年级上册劳动教案 福建教育出版社(已排版好,可直接打印)
- 呼吸机相关性肺炎预防护理课件
- 医疗机构药事管理与法规
评论
0/150
提交评论