第七章.常用类
主要内容:1. String类 2.StringBuffer类 3.String类与StringBuffer类比较 4.StringTokenizer类 5.日期类
案例:简易字符串编辑器的所有功能如下图所示,使用本编辑器,可以对字符串进行7种常规处理,例如字符串比较,字符串搜
索,字符串替换等。
import java.text.*;
import java.util.*;
public class StringEditor {
public static void main(String[] args) {
boolean flag=true;
Scanner scanner=new Scanner(System.in);
int choice;
while(flag){
ShowDate();
System.out.println("请选择所要进行的操作(输入操作序号):");
System.out.println("--------------------------------------");
System.out.println("0.退出");
System.out.println("1.字符串比相同");
System.out.println("2.字符串搜索");
System.out.println("3.字符串替换");
System.out.println("4.字符串截取");
System.out.println("5.字符串反转");
System.out.println("6.字符串追加");
System.out.println("7.字符串拆分");
System.out.println("--------------------------------------");
choice=scanner.nextInt();
switch(choice)
{
case 0:
{
flag=false;
break;
}
case 1:
{
String str1,str2;
Scanner scanner1=new Scanner(System.in);
System.out.println("请输入一个字符串:");
str1=scanner1.nextLine();
System.out.println("请输入与之比较的字符串:");
str2=scanner1.nextLine();
StringCompare(str1,str2);
break;
}
case 2:
{
String str1,str2;
Scanner scanner1=new Scanner(System.in);
System.out.println("请输入一个字符串:");
str1=scanner1.nextLine();
System.out.println("请输入想要搜索到的字符串:");
str2=scanner1.nextLine();
StringSearch(str1,str2);
break;
}
case 3:
{
Scanner scanner1=new Scanner(System.in);
System.out.println("请输入一个欲处理字符串:");
String str=scanner1.nextLine();
System.out.println("请输入被替换字符串:");
String oldStr=scanner1.nextLine();
System.out.println("请输入替换字符串:");
String tempStr=scanner1.nextLine();
StringReplace(str,oldStr,tempStr);
break;
}
case 4:
{
Scanner scanner1=new Scanner(System.in);
System.out.println("请输入一个欲处理字符串:");
String str=scanner1.nextLine();
System.out.println("请输入截取字符串开始索引(索引值从0开始):");
int begin=scanner1.nextInt();
System.out.println("请输入截取字符串结束索引:");
int end=scanner1.nextInt();
StringSub(str,begin,end);
break;
}
case 5:
{
Scanner scanner1=new Scanner(System.in);
System.out.println("请输入一个需反序字符串:");
String str=scanner1.nextLine();
StringReverse(str);
break;
}
case 6:
{
Scanner scanner1=new Scanner(System.in);
System.out.println("请输入原字符串:");
String str=scanner1.nextLine();
System.out.println("请输入想要追加的字符串:");
String tempStr=scanner1.nextLine();
StringAppend(str,tempStr);
break;
}
case 7:
{
Scanner scanner1=new Scanner(System.in);
System.out.println("请输入想要拆分的字符串:");
String str=scanner1.nextLine();
System.out.println("请输入拆分字符串的分隔符号:");
String delim=scanner1.nextLine();
StringSplit(str,delim);
break;
}
default:
{
System.out.println("您没有选择任何操作!");
break;
}
}
}
}
public static void StringCompare(String str1,String str2){
if(str1.equals(str2))
System.out.println("两字符串相同!");
else
System.out.println("两字符串不同!");
}
public static void StringSearch(String str1,String str2){
int length=str1.length();
System.out.println("查找字符串\""+str1+"\"中所有"+str2+"的索引值:");
for(int i=0;i<length;i++){
i=str1.indexOf(str2, i);
if(i<0) return;
System.out.println(str2+":"+i+"\t");
}
}
public static void StringReplace(String str,String oldStr,String tempStr){
String newStr=str.replace(oldStr, tempStr);
System.out.println("替换后的字符串:"+newStr);
}
public static void StringSub(String str,int begin,int end){
String subStr=str.substring(begin, end);
System.out.println("截取后的字符串:"+subStr);
}
public static void StringReverse(String str){
StringBuffer buffer=new StringBuffer(str);
StringBuffer resultBuffer=buffer.reverse();
System.out.println("字符串"+str+"的反序字符串:"+resultBuffer.toString());
}
public static void StringAppend(String str,String tempStr){
StringBuffer buffer=new StringBuffer(str);
buffer.append(tempStr);
System.out.println("追加后的字符串:"+buffer.toString());
}
public static void StringSplit(String str,String delim){
StringTokenizer tokenizer=new StringTokenizer(str,delim);
int number=tokenizer.countTokens();
String temp=null;
System.out.println("\n\""+str+"\"字符串共有"+number+"个语言符号:");
while(tokenizer.hasMoreTokens()){
temp=tokenizer.nextToken();
System.out.print(temp+"\t");
}
}
public static void ShowDate(){
Date dt=new Date();
DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 EEE HH:mm:ss");
String nowTime="";
nowTime= df.format(dt);
System.out.println("\n");
System.out.println("--------------------------------------");
System.out.println("当前时间:"+nowTime);
System.out.println("--------------------------------------");
}
}
7.1——String类
一、创建String字符串
1.采用声明普通变量的方法
语法格式:
String 对象名=字符串类型数据;
例如:
String str1="hello";
String str1; //先定义后赋值
str1="hello";
String类构造方法
二、String类的常用操作及方法
1. 获得字符串长度
方法:int length()
语法:字符串名.length();
功能:返回字符串的长度
例如:int length=str1.length();
2.字符串比较
(1)boolean equals ( Object anObject )
功能:将当前字符串与参数指定的对象比较,如果相同,返回true,否则返回false。
(2)boolean equalsIgnoreCase ( String anotherString )
功能:与boolean equals ( Object anObject )功能相似,忽略大小写。
3.字符串检索
(1)int indexOf(String str)
功能:返回第一次出现的指定子字符串在此字符串中的索引
例如:String s="青春无悔";
int index=s.indexOf("青春");
执行后,index的内容是0。
(2)int indexOf(String str, int startIndex)
功能:从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。
例如:
String s="青春无悔无悔青春";
int index=s.indexOf("青春",3);
(3)int lastIndexOf(String str)
功能:返回在此字符串中最右边出现的指定子字符串的索引。
例如:String s="青春无悔无悔青春";
int index=s.indexOf("青春");
执行后,index的内容是6
(4)int lastIndexOf(String str, int startIndex)
功能:从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。
例如:String s="青春无悔无悔青春青春无悔";
int index=s. lastIndexOf("青春", 5);
执行后,index的内容是7
4.字符串替换
(1)String concat(String str)
功能:将指定字符串连接到当前字符串结尾。
例如:s1="abc";
s2="def";
String s3=s1.concat(s2);
执行后,s3的内容是abcdef。
(2)String replace(char oldChar,char newChar)
功能:用newchar字符替换当前字符串中的oldchar字符得到新的字符串, 既支持字符的替换,也支持字符串的替换。
例如:
String sTemp=“There is a apple”;
String temp; temp=sTemp.replace(‘e’,’A’);
执行后,temp的内容是Th ArA is a applA
(3)String toLowerCase( )
功能:将字符串中的所有字符从大写改为小写
例如:String s="STUDENT";
String index=s.toLowerCase ();
执行后,index的内容是“student”
(4)String toUpperCase( )
功能:将字符串中的所有字符从小写改为大写
例如:String s="student";
String index=s.toUpperCase ();
执行后,index的内容是“STUDENT”
(5)public String trim()
(1)功能:返回一个前后不含任何空格的调用字符串的副本
例如:String s=" 青春无悔 ";
String index=s.trim();
执行后,index的内容是“青春无悔”
(2)String subString(int beginIndex,int endIndex)
功能:提取某个区间内的字符串
例如:String s="青春无悔无悔青春";
String index=s.substring(2,6);
执行后,index的内容是无悔无悔
5.字符串截取
(1)String subString(int beginIndex)
功能:提取从某位置开始的字符串
例如:String s="青春无悔";
String index=s.substring(1);
执行后,index的内容是"春无悔"
7.2——StringBuffer类
一、创建StringBuffer类对象
(1)public StringBuffer()
功能:构造一个不带字符的字符串缓冲区,初始容量为16个字符。
例如:StringBuffer s=new StringBuffer();
(2)public StringBuffer(int capacity)
功能:构造一个不带字符,具有指定初始容量的字符串缓冲区。
例如:StringBuffer s=new StringBuffer(6);
(3)public StringBuffer( String str)
功能:构造一个字符串缓冲区,并将其内容初始化为String对象str指定的字符串内容。该字符串的初始容量为 16 加上字符串参数的长度。该构造方法常用来将一个String类对象转换为StringBuffer类对象。
例如:StringBuffer s=new StringBuffer(“apple”);
二、StringBuffer类常用方法
1. int capacity()
功能:查看当前StringBuffer对象的缓冲区容量
例如:
StringBuffer str1=new StringBuffer(100);
int x=str1.capacity();
执行后,x的内容是100。
2. StringBuffer insert(String str)
功能:在指定位置插入新内容
例如:
StringBuffer str1=new StringBuffer("JAVA");
String str2="_learning";
str1.insert(2,str2);
执行后,str1的内容是JA_learningVA。
3. StringBuffer delete(int start,int end)
功能:删除指定位置上的内容
例如:
StringBuffer buffer=new StringBuffer(“Hello,world!”);
buffer.delete (6,11);
执行后,str1的内容是Hello,。
4. StringBuffer reverse()
功能:将当前StringBuffer对象反序排列
5. StringBuffer append(String str)
功能:给当前StringBuffer对象追加一个str字符串对象
6. String toString()
功能:该方法将创建一个与该对象内容相同的字符串对象
例如:
StringBuffer str1=new StringBuffer("JAVA");
str1.toString ();
执行后,str1的内容是JAVA。
7.3——String类与StringBuffer类比较
一、字符串串连符
字符串串联符号“+”,支持进行String字符串的连接,Java提供了其他变量或对象到字符串的转换这一特殊支持,因此串联运算符也可以在String字符串与其他类型之间进行串联。其优先级与结合性与算术运算符“+”相同。
例如:
String s="你好",s1;
s1="abc"+"def";
二、String与StringBuffer类的联系与区别
String类与StringBuffer类都是用来处理字符串的类,两者之间既有联系,也有区别。先从以下方面进行总结,方便大家理解和正确应用这两个字符串处理类。
String类和StringBuffer类的字符串内的字符索引都是以0开始。
两个类都提供了一些相同的操作,如length,charAt,subString,indexOf,且他们在两个类中的用法也相同。
String类表示常量字符串,不可以改变;StringBuffer类表示可变字符串,提供了若干改变字符串的方法。
String类覆盖了Object类的equals方法,用来进行字符串内容的比较,而StringBuffer类没有覆盖equals方法,因此其只是做基本的引用的比较。
两个类都覆盖了Object类的toString方法,但各自的实现方式不一样,String类的toString方法返回当前String实例本身的引用,而StringBuffer类的toString方法返回一个以当前StringBuffer的缓冲区中的所有字符为内容的新的String对象的引用。
7.4——StringTokenizer类
一、StringTokenizer类对象的创建
1. StringTokenizer(String str)
功能:为指定字符串str构造一个分析器,使用默认的分隔符集合:空格符(若干个空格符看做一个空格符)、换行符、回车符、Tab符和换页符。
例如:
StringTokenizer tokenizer1=new StringTokenizer(“we are students”);
执行后,为字符串we are students构造了一个分析器,分隔符为空格。
2.StringTokenizer(String str,String delim)
功能:为指定字符串str构造一个分析器,使用指定的分隔符delim
例如:
StringTokenizer tokenizer2=new StringTokenizer(“site www.itzcn.com”,”.”);
执行后,为字符串site www.itzcn.com构造了一个分析器,分隔符为点。
二、StringTokenizer类常用方法
1. int countTokens()
功能:返回字符串中的语言符号个数
例如:StringTokenizer tokenizer2=new StringTokenizer(“site www.itzcn.com”,”.”);
int temp=tokenizer1.countTokens();
执行后,temp的值为3。
2. boolean hasMoreToken()
功能:判断字符串中是否还有语言符号。若有,返回true;否则返回false。
例如:
StringTokenizer tokenizer2=new StringTokenizer(“www.itzcn.com”);
if(tokenizer2. hasMoreToken())
System.out.println(“Yes”);
else
System.out.println(“No”);
执行后,输出提示信息No。
3. String nextToken()
功能:逐个获取字符串中的语言符号
例如:
StringTokenizer tokenizer2=
new StringTokenizer(“site www.itzcn.com”,”.”);
String temp;
temp=tokenizer1.nextToken();
执行后,变量temp中内容为site www。如果要获取tokenizer2中的所有语言符号,需要一个循环。
7.5——日期类
一、 Date类对象的创建
1.创建一个当前时间
Date d = new Date();
默认是创建一个代表系统当前日期的Date对象。Date类主要用于获得本地当前时间,其表示时间的默认顺序是星期、月、日、小时、分、秒、年。
2. 创建一个我们指定的时间的Date对象
Date d1 = new Date(2013-1900, 5-1, 5);
执行后,创建了一个代表2013年5月5日的Date对象,该带参数的构造方法,可以构造指定日期的Date类对象,Date类中年份的参数应该是实际需要代表的年份减去1900,实际需要代表的月份减去1以后的值。
二、常用构造方法介绍
(1)SimpleDateFormat()
功能:用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
例如:Date dt=new Date();
DateFormat df1=new SimpleDateFormat();
String nowTime="";
nowTime= df1.format(dt);
System.out.println("当前时间:"+nowTime);
执行后,输出结果为当前时间:15-1-30 下午12:30。
(2)SimpleDateFormat(String pattern)
功能:用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
例如:Date dt=new Date();
DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 EEE HH:mm:ss");
String nowTime="";
nowTime= df.format(dt);
System.out.println("当前时间:"+nowTime);
执行后,输出结果为当前时间:当前时间:2015年01月30日 星期五 12:30:28。
一、Calendar类对象的创建
Calendar类是一个抽象类,且Calendar类的构造方法是protected的,因此不能使用new关键字来实例化一个Calendar对象,只需要使用getInstance()方法创建即可。
1.创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();
2.创建一个指定日期的Calendar对象
使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
例如,要创建一个代表2013年5月5日的Calendar对象,可以使用下面的语句:
Calendar c1 = Calendar.getInstance();
c1.set(2013, 5 - 1, 5);
二、Calendar类对象字段类型
Calendar.YEAR——年份
Calendar.MONTH——月份
Calendar.DATE——日期
Calendar.DAY_OF_MONTH——日期,和上面的字段意义完全相同
Calendar.HOUR——12小时制的小时
Calendar.HOUR_OF_DAY——24小时制的小时
Calendar.MINUTE——分钟
Calendar.SECOND——秒
Calendar.DAY_OF_WEEK——星期几
Calendar类常用方法