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));//true
String str3 = "QWERT";
String str4 = "asdfg";
// String toLowerCase():将此String中的所有字符都转换成小写
// String toUpCase():将此String中的所有字符都转换成大写
String newStr3 = str3.toLowerCase();
System.out.println(str3);//QWERT
System.out.println(newStr3);//qwert
System.out.println(str4.toUpperCase());//ASDFG
System.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);//3hello
System.out.println(1+str1+2);//1hello2
System.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);//4
int 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);//4
int 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);//qweratyuioperauip
System.out.println(subString1);//tyuioperauip
String subString2=str.substring(5, 13);//[5,13)之间的字符
System.out.println(str);//qweratyuioperauip
System.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 asdffg
String 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);//qwertyuiopasdfg
System.out.println(sb2);//qwertyuiopasdfg
StringBuffer sb3=sb1.delete(2, 5);//删除字符串sb1中[2,5)之间的字符
System.out.println(sb3);//qwyuiopasdfg
System.out.println(sb1);//qwyuiopasdfg
sb1.insert(3, "opq");//在指定索引处插入字符串到此字符串中
System.out.println(sb1);//qwyopquiopasdfg
sb1.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开始到11
System.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类来格式化和解析日期字符串。