【Java高级特性】实用类(二)
1.String类
1.1 概述
1.Java中,字符串被作为String类型的对象来处理;
2.String类位于java.lang包中,默认情况下,该包自动导入所有程序;
3.创建String对象的方式如下:
String str="qwer";
String str=new String("asdf");
4.字符串是一个字符序列,每个字符都有自己的位置,字符串事实上也是一个字符数组,它的索引位置从0开始到(字符串长度-1)结束。
1.2 String类常用方法
| char charAt(int index) | 返回指定索引处的char类型的值 |
| int length() | 返回字符串的长度 |
| boolean equals(Object anObject) | 将此字符串与指定的对象比较 |
| boolean equalslgnoreCase(String anotherString) | 将此String和另一个String比较,不考虑大小写 |
| String toLowerCase() | 将此String中的所有字符都转换成小写 |
| String toUpCase() | 将此String中的所有字符都转换成大写 |
代码举例:
public static void main(String[] args) {// 创建String对象String str1 = new String("qwertyuiop");String str2 = "QWErtyuiop";// String类中包含很多方法以实现不同的功能// char charAt(int index):返回指定索引处的char值char ch1 = str1.charAt(0);System.out.println(ch1);//q// int length():返回此字符串的长度System.out.println(str2.length());//10// boolean equals(Object anObject) 将此字符串与指定的对象比较。// String类中重写了Object类中的equals()方法,比较的是两个字符串的内容是否相同boolean result = str1.equals(str2);System.out.println(result);//false// boolean equalslgnoreCase(String anotherString)// 将此String和另一个String比较,不考虑大小写System.out.println(str1.equalsIgnoreCase(str2));//trueString str3 = "QWERT";String str4 = "asdfg";// String toLowerCase():将此String中的所有字符都转换成小写// String toUpCase():将此String中的所有字符都转换成大写String newStr3 = str3.toLowerCase();System.out.println(str3);//QWERTSystem.out.println(newStr3);//qwertSystem.out.println(str4.toUpperCase());//ASDFGSystem.out.println(str4);//asdfg// String类的对象调用方法时,都是值传递}
1.3 字符串连接
字符串的连接方法主要有两种:使用“+”连接;使用concat()方法
代码举例说明:
public static void main(String[] args) {String str1="hello";String str2="world";System.out.println(str1+str2);//helloworld,这里的“+”表示连接符//String concat(String str):将指定字符串连接到此字符串的结尾String newString=str1.concat(str2);//将字符串str2连接到字符串str1的结尾System.out.println(newString);System.out.println(str1);System.out.println(str2);System.out.println(1+2+str1);//3helloSystem.out.println(1+str1+2);//1hello2System.out.println(str1+1+2);//hello12}
1.4 字符串常用提取方法

代码举例:
public static void main(String[] args) {//字符串常用提取方法String str="qweratyuioperauip";//int indexOf(int ch):返回指定字符在此字符串第一次出现处的索引int index1=str.indexOf('a');System.out.println(index1);//4int index2=str.indexOf(97);//输入字符相对应的ASCII编码值也可以System.out.println(index2);//4//int indexOf(int ch,int fromIndex):返回指定字符串在此字符串第一次出现处的索引,从指定索引处开始搜索int index3=str.indexOf('a', 5);//从索引5处开始搜索字符'a'所在的索引System.out.println(index3);//13//int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引(指定字符串中第一个字符的下标)。int index4=str.indexOf("aty");System.out.println(index4);//4int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。int index5=str.indexOf("aty", 5);System.out.println(index5);//-1,找不到就会返回一个负整数//int lastIndexOf(int ch):返回指定字符在此字符串中最后一次出现的索引int index6=str.lastIndexOf('a');System.out.println(index6);//13//String subString(int beginIndex):返回一个新的字符串,它是此字符串的一个子字符串//String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串//包含开始下标的字符,不包含结束下标的字符。String subString1=str.substring(5);System.out.println(str);//qweratyuioperauipSystem.out.println(subString1);//tyuioperauipString subString2=str.substring(5, 13);//[5,13)之间的字符System.out.println(str);//qweratyuioperauipSystem.out.println(subString2);//tyuioper//String trim():返回字符串的副本,忽略前导空白和尾部空白。String str2=" qwert asdffg ";String newStr2=str2.trim();System.out.println(str2);// qwert asdffg System.out.println(newStr2);//qwert asdffgString str3=" sdgfhfk qweee ";System.out.println(str3.trim());//sdgfhfk qweee}
1.5 字符串常用拆分方法
| String[ ] split(String regex) | 根据给定的正则表达式拆分此字符串 |
| boolean endWith(String suffix) | 判断此字符串是否以指定的后缀结束 |
| boolean startWith(String perfix,int toffset) | 测试此字符串从指定索引处开始的子字符串是否以指定的前缀开始 |
| byte[ ] getBytes() | 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte数组中 |
| char[ ] toCharArray() | 将此字符串转换成一个新的字符数组 |
代码举例:
public static void main(String[] args) {String song = "长亭外 古道边 芳草碧连天 晚风拂 柳笛声残 夕阳山外山";// String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。String[] strs = song.split(" ");for (int i = 0; i < strs.length; i++) {System.out.println(strs[i]);}String str = "qwertyuiop";// boolean endWith(String suffix):测试此字符串是否以指定的后缀结束。System.out.println(str.endsWith("iop"));// true// boolean startWith(String perfix,int toffset)// 测试此字符串从指定索引处开始的子字符串是否以指定的前缀开始System.out.println(str.startsWith("qwe", 1));// 判断从索引1开始的子字符串前缀是否是"qwe",false// byte[] getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte数组中byte[] bytes = str.getBytes();for (int i = 0; i < bytes.length; i++) {System.out.print(bytes[i] + " ");}System.out.println();// char[] toCharArray():将此字符串转换成一个新的字符数组char[] chs = str.toCharArray();for (int i = 0; i < chs.length; i++) {System.out.print(chs[i] + " ");}}
2.StringBuffer类
2.1 概述
1.StringBuffer类也是Java提供的用于处理字符串的一个类,它比String类更高效;
2.使用StringBuffer类对字符串进行连接操作,可以大大提高程序的执行效率。
2.2 如何使用StringBuffer类
StingBuffer类位于java.lang包中,是String类的增强类。
StringBuffer 对象名=new StringBuffer("字符串内容");
2.3 常用方法
1)toString()方法:将StringBuffer类型的字符串转换为String类型的对象。
2)append(参数)方法:将参数连接到字符串后,可以将任何类型的值追加到字符串后。
3)insert(位置,参数)方法:将参数插入到字符串指定位置后并返回。参数值可以是包括String的任何类型。
代码举例说明:
public static void main(String[] args) {StringBuffer sb1=new StringBuffer("qwertyuiop");StringBuffer sb2=sb1.append("asdfg");//append()方法:将指定字符串"asdfg"追加到此字符串sb1末尾//StringBuffer类的对象调用方法时,传递的是地址,效率比String类高,线程安全System.out.println(sb1);//qwertyuiopasdfgSystem.out.println(sb2);//qwertyuiopasdfgStringBuffer sb3=sb1.delete(2, 5);//删除字符串sb1中[2,5)之间的字符System.out.println(sb3);//qwyuiopasdfgSystem.out.println(sb1);//qwyuiopasdfgsb1.insert(3, "opq");//在指定索引处插入字符串到此字符串中System.out.println(sb1);//qwyopquiopasdfgsb1.reverse();//反转字符串System.out.println(sb1);}
3.StringBuilder类
(1)java.lang.StringBuilder是JDK 1.5之后新增的类,它是一个可变的字符序列。
(2)此类提供一个与StringBuffer类兼容的API,被设计用作StringBuffer类的一个简易替换,在大多数实现中,它比StringBuffer执行要快。
(3)使用StringBuilder类处理字符串的方法与StringBuffer类基本一样。
4.String类、StringBuffer类和StringBuilder类
String:字符串常量
String是不可变的对象,在每次对String类型进行改变时,实际上是生成一个新的String对象,然后指向这个新String对象,所以经常改变内容的字符串最好不使用String类型,每次生成对象会对系统的性能产生影响。
StringBuffer:字符串变量
StringBuffer是可变的字符串,在每次对StringBuffer对象进行改变时,都是操作StringBuffer对象本身,而不是生成新的对象。所以,在字符串对象经常改变的情况下,建议使用StringBuffer类。
StringBuilder:字符串变量
JDK 1.5版本以后提供了StringBuilder类,它和StringBuffer类等价,区别在于StringBuffer类是线程安全的,StringBuilder类是单线程的,不提供同步,理论上效率更高。
5.Date类和DateFormat类
Date类对象用来表示日期和时间。该类提供了一系列操作日期和时间各组成部分的方法。Date类中使用最多的是获取系统当前的日期和时间。
Date date = new Date();//使用系统当前时间创建日期对象。
DateFormat类用来格式化日期和时间,它在java.text包下,是一个抽象类,提供了多种格式化和解析时间的方法。
格式化是将日期转换成文本,解析是将文本转换成日期格式。使用比较多的是它的子类SimpleDateFormat类。
SimpleDateFormat类是一个以语言环境有关的方式格式化和解析日期的具体类,如“yyyy-MM-dd HH:mm:ss”就是指定的一种日期和时间格式。
代码举例说明:
//Date类和SimpleDateFormat类public static void main(String[] args) {// 创建Date类对象Date date=new Date();//System.out.println(date);//SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。//它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。 SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");//format(Date date):将给定的 Date 格式化为日期/时间字符串,返回的是一个字符串String str=sdf.format(date);System.out.println("现在是:"+str);}
6.Calendar类
Calendar类也是用来操作日期和时间的类,它可以看作是Date类的一个增强版。Calendar类提供了一组方法,允许把一个以毫秒为单位的时间转换成年、月、日、小时、分、秒。
Calendar类是抽象类,可以通过静态方法getInstance()获得Calendar类的对象,其实这个获得的对象是它的子类的对象。
Calendar类提供一些方法和静态字段来操作日历,例如:
int get(int field):返回给定日历字段的值。
YEAR:指示年。
MONTH:指示月。
DAY_OF_MONTH:指示一个月中的某天。
DAY_OF_WEEK:指示一个星期中的某天。
代码举例说明:
public static void main(String[] args) {//Calendar类是抽象类,不能实例化,可以通过Calendar的一个引用对象来调用方法//static getInstance():创建一个Calendar引用Calendar cal=Calendar.getInstance();//int get(int field):返回给定日历字段的值。//获取年int year=cal.get(Calendar.YEAR);System.out.println(year);//获取月int month=cal.get(Calendar.MONTH);//MONTH月份字段的值从0开始到11System.out.println(month+1);//获取日int day=cal.get(Calendar.DAY_OF_MONTH);System.out.println(day);//获取时分秒int hour=cal.get(Calendar.HOUR_OF_DAY);System.out.println(hour);int minute=cal.get(Calendar.MINUTE);System.out.println(minute);int second=cal.get(Calendar.SECOND);System.out.println(second);//获取星期int week=cal.get(Calendar.DAY_OF_WEEK);//DAY_OF_WEEK字段以星期天作为第一天,返回的是[1,7]之间星期对应的整数System.out.println(week);String[] weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};System.out.println(weeks[week-1]);System.out.println("现在是:"+year+"年"+(month+1)+"月"+day+"日,"+weeks[week-1]+" "+hour+"点"+minute+"分"+second+"秒");}
在JDK 1.1之间,Date类允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的API不易于实现国际化。从JDK 1.1开始,使用Calendar类实现日期和时间字段之间的转化,使用DataFormat类来格式化和解析日期字符串。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
