1、我们把这种方式称之为共享模式、而使用new创建不同对象的方式称之为非共享模式。从图中我们不难发现在共享模式下aStr对象和bStr对象共同使用一个String对象的内存空间,而在非共享模式下,虽然aStr对象和bStr对象中的字符串内容一致,但是其使用的是不同的String对象的内存空间。9.1.2 = 和 equals()一般情况下,对两个数据内容的比较使用“=”运算符,但是在Java对象的比较中使用“=”却有着另外含义,即“=”比较的是字符串对象所保存的内存空间的地址、也可以说是判断两个字符串对象是否使用同一个内存空间来保存数据。而如果要判断两个字符串对象的内容是否相同,即使它们不是同一个
2、String对象的内存空间时,我们就需要使用equals()进行判断了。示例1运行结果:9.1.2 字符串的比对 startsWith()、endsWith()和regionMatches()startsWith()和endsWith()用于测试此字符串是否以指定的前缀开始,或者以后缀结束,而regionMatches()则是测试两个字符串区域是否相等。它们都是字符串的比对方法,不过以上比对只能返回比对成功或者是失败,不能返回字符串中比对成功的子串数量和位置。以下示例是判断字符串数组中保存的身份证以530作为开头身份证号码的数量,另外一个则是判断字符串中出现en的数量。由于不能返回数量,因此需
3、要使用循环和计数器。示例29.1.3 字符串转换为数字类型 字符串可以转换为基本数字类型,使用的方法是各种数字类型封装类的parseXXX()方法。以下示例为用户输入一个代表某整数的字符串,将该字符串转换后得到对应的整数,利用该整数获得乘积后进行输入。代码如下:示例39.1.4 符串中的子串定位和子串的获取indexOf()和substring() 我们经常需要对字符串进行分析和提取相关有用的数据,此时可以使用String类型中的两个成员方法:indexOf()和subString(),两方法的具体原型如下: 以下示例是从一个文件全路径的字符串中解析出目录和文件名的代码, 代码中每次都需要使用
4、indexOf()获得前后两个的位置,然后使用substring()来获取它们之间的子串。示例49.2 StringBuffer 在Java中,StringBuffer是String类的一种补充,它们都是用于做字符串处理的类型,但是它们之间又是拥有区别的,String类是不可改变的,如果你更改了String类的对象,那么以前的就“不存在了”,所指向的是一个新的实例。而StringBuffer类型则不会创建新的类对象,当需要修改一个StringBuffer类型对象的内容时,它会在现有内存基础上进行内存的扩容,然后再通过append()方法实现新内容的修改和链接操作。因此如果在程序中需要对字符串进
5、行频繁的修改连接操作的话.使用StringBuffer性能会更高。 StringBuffer在每次修改内容时都会根据需要扩充其容量,我们可以使用length()来获得新字符串的长度,以及capacity()获得当前字符串的可用容量。以下示例中正是反映了这一特点,代码如下:示例 5 StringBuffer类除了在内存分配、使用和效率方面与String类型不同外,String类型中的所有操作函数在StringBuffer类型中都有。在Java语言发展至今,越来越多的程序员选择使用StringBuffer来替代String做字符串的处理操作。9.3 Date时间类 Java要获取日期和时间,需要使
6、用能存储时间,以及提供获取时间和操作时间的类型,Date是Java1.1版本以前用以获得时间和存储时间的类型。利用Date来获得当前日期和时间的方法是使用new来创建Date的对象。虽然Date对象可以获得并存储日期和时间内容,但是它不能将日期和时间中的年、月、日、小时、分钟、秒分别获取出来。因为该类型的getYear()、getMonth()、getDay()、getHour()、getMinute()和getSecond()方法已经过期,在1.1版本后将使用Calendar类来替代。想要通过Date来输出时间需要使用SimpleDateFormat来格式化时间进行输出的。 以下示例使用Da
7、te类来获得当前日期和时间,并使用SimpleDateFormat来格式化不同的时间格式来进行输出。示例69.4 Calendar类Calendar类是1.1版本后用于操作时间的类型。它提供了很多方法用于设置和获取时间的方法。其中属于field的日期和时间关键字如下YEAR指示年MONTH指示月份,月份一般从0开始,因此得到的结果为1,实际上指的是2月WEEK_OF_YEAR当前年中的星期数,如一年中第一个星期的值为 1WEEK_OF_MONTH指示当前月中的星期数,如一个月中第一个星期的值为 1DATE指示当前月中的第几天,与DAY_OF_MONTH用法相同。DAY_OF_MONTHDAY_
8、OF_WEEK示一个星期中的第几天,周日是1,周一是2,周二是3,以此类推AM_PM指示 HOUR 是在中午之前还是在中午之后。HOUR指示小时,为12小时制HOUR_OF_DAY指示小时,为24小时制MINUTE指示小时内的分钟,60分钟制SECOND指示一分钟中的秒以下是一个获得保存当前日期和时间的Calendar对象并得到年、月、日、星期、小时、分钟、秒等具体数据的代码,其中“/”注释的代码为为Calendar对象指定一个日期和时间。示例7运行结果一:运行结果二、作业一 关于身份证第18是怎么计算的,原理如下:根据中华人民共和国国家标准 GB 11643-1999中有关公民身份号码的规定
9、,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。地址码(身份证前六位)表示编码对象常住户口所在县(市、旗、区)的行政区划代码,号码从110000到820000。生日期码(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。顺序码和数字码可以不同再进行验证。问题:输入一个18位的身份证号码,利用字符串取子串方法获得地区码、生日号码中的年、月、日并判断该身份证号码的真假。作业二以下是
10、一个邮件信息格式化字符串,包含有发件人、收件人、主题、和正文内容如下:“Lihai27#*#4718589#*#期末考试时间安排#*#2011年上半学期期末考试安排:7月4日笔试和项目考试结束,7月12日前登分结束”。运用字符串的indexOf()定位方法和substring()子串获取方法,将发件人、收件人、主题、和正文内容解析出来并分别显示,例如:发件人:Lihai27收件人:4718589主题:期末考试时间安排正文内容:2011年上半学期期末考试安排:7月4日笔试和项目考试结束,7月12日前登分结束作业三 利用Calendar类型来获得当前日期所在的月份的日历。如图:提示:首先判断当前月的总天数,然后逐一设置当前月的日期,从1到最后一天。获得每一天是属于该月的第几个星期,以及所在星期的第几天,然后把该日期数字存储在一个6*7的数组中,并格式化输出。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2