常用类
String类
构造字符串对象
1.字符串常量对象:字符串常量对象是用双引号括起来的字符串序列
2.字符串对象(声明字符串变量,new运算符创建字符串对象)
声明:String s;
创建字符串对象:
1)s=new String(“hello”);
2)用一个已创建的字符串创建另一个字符串,
例如 String a=new String(s);
3)String类常用构造方法:
String(char[ ] a) ,用一个字符数组创建一个字符串对象
char[]a={'1','2','3'};
String s=new String (a);// 效果相当于String s=new String("123");
String(char[ ] a,int startIndex,int count) ,提取字符数组a中的一部分字符创建一个字符串对象,参数startIndex和count分别指定在a中提取字符的起始位置(索引从0开始)和从该位置开始截取的字符个数
char []a={'1','2','3','4','5','6','7','8'};
String s=new String(a,3,4);// 相当于String s=new String("4567");
3.引用字符串常量对象
字符串常量是对象,因此可以把字符串常量的引用赋值给一个字符串变量
String s1,s2;
s1="how are you";
s2="how are you";
这样,s1,s2具有相同的引用,因而具有相同的实体
注意:
字符串常量池中的字符串是常量,不能被改变上面例子里的字符串常量"how are you"就是被创建在字符串常量池中,而new运算符创建的字符串变量不是放在常量池中。
String s1=new String("921");
String s2=new String("921");
String s3="118";
String s4="118";
System.out.println(s1==s2); //false,这里比较的是两个引用变量的值,这两个引用变量指向不同的字符串对象
System.out.println(s3==s4); //true,s3和s4都指向字符串常量池中的同一个字符串常量“118”
字符串常量池中的字符串是常量,不能被改变
s3=921+s3;
System.out.println(s3); //输出:921118
System.out.println(s4); //输出118,先前s3和s4共同指向的字符串没有被改变,而是字符串常量池中又创建了新的字符串常量,s3的指向变了
public class demo1 {
public static void main(String[] args) {
String s1=new String("123");
String s2=new String("456");
String s3="abc";
s3=s3+"de"; //字符串常量池中创建了一个新的对象,对象的引用赋给s3
s1=s1+s2; //创建了新的对象,这个对象是在字符串常量池里面
s2=s2+"789"; //创建了新的对象,这个对象是放在字符串常量池里面
}
}
String类的常用方法
1.public int length(),调用length()方法就可以获取一个字符串的长度,注意区别数组里的length,那是一个变量,这里的是一个方法
2.public boolean equals(String s)
字符串对象调用equals(String s)方法比较当前字符串对象的实体是否与参数s指定的字符串的实体相同
String s1=new String("abc");
String s2=new String("abc");
System.out.println(s1.equals(s2)); //true
3.public boolean equalsIgnoreCase(String s)比较当前字符串对象与参数s的字符串是否相同,比较时忽略大小写
4.public boolean startsWith(String s)
字符串对象调用startsWith(String s)方法,判断当前对象的前缀是否是参数s指定的字符串
public boolean endsWith(String s)
字符串对象调用endsWith(String s)方法,判断当前对象的后缀是否是参数s指定的字符串
5.public int CompareTo(String s)
字符串对象调用CompareTo(String s)方法,按字典序(‘b’>‘a’)与参数s指定的字符串比较大小。如果当前字符串与s相同,返回0;如果大于s,返回正值;如果小于s,返回负值
CompareToIgnoreCase(String s)忽略大小写
6.public boolean contains(String s)
字符串对象调用contains(String s)方法,判断当前对象是否含有参数指定的字符串
7.public int indexOf(String s)
字符串对象调用indexOf (String s)方法,从当前字符串的头开始检索字符串s,并返回首次出现s的位置 ,如果没有检索到s,则返回-1(索引从0开始)
indexOf(String s,int startpoint)方法从当前字符串的standpoint位置开始检索字符串s,并返回首次出现s的位置 ,如果没有检索到s,则返回-1
lastIndexOf(String s)从当前字符串的头开始检索字符串s,并返回最后出现s的位置 ,如果没有检索到s,则返回-1
8.public String substring(int standpoint)
字符串对象调用substring (int standpoint)方法获得一个子串,该子串是从当前字符串的standpoint位置开始截取到最后位置所得到的字符串
substring(int start ,int end),获取一个子串,该子串是从start位置开始截取到end位置的字符串,且不包括end位置上的字符
9.public String trim()
字符串对象s调用trim()方法,得到一个s去掉前后空格后的字符串对象
字符串与基本数据的相互转化
1.java.lang 包中的Integer类调用其类方法public static int parseInt(String s)可以将由“数字”字符组成的字符串转化为int型类型
int x;
String s="921";
x=Integer.parse(s);//x=921
类似地,使用java.lang包中的Byte、Short、Long、Float、Double类调用相应的类方法
例如public static float parseFloat(String s) throws NumberFormatException
2.使用String类的下列类方法可以将数值转化为字符串
public static String valueOf(byte n)
public static String valueOf(int n)
public static String valueOf(float n)
public static String valueOf(long n)
public static String valueOf(double n)
对象的字符串表示
Object类有一个public String toString()方法,一个对象通过调用该方法可以获得该对象的字符串表示。一个对象调用toString()方法返回的字符串的一般形式为:创建对象的类的名字@对象的引用的字符串表示。
class A{
}
public class demo1 {
public static void main(String[] args) {
A a=new A();
System.out.println(a.toString());//输出:A@15db9742
}
}
可以重载toString函数返回自己定义的字符串。
class A{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() { //重写了toString()
return "name="+name;
}
}
public class demo1 {
public static void main(String[] args) {
A a=new A();
a.setName("张三");
System.out.println(a.toString());//输出:name=张三
}
}
字符串与字符、字节数组
字符串与字符数组
1.前面提到String类的构造方法String(char[ ] a) 、String(char[ ] a,int offset,int length)(String(char[ ] a,int startIndex, int count))分别用数组a的全部字符和部分字符创建字符串对象
2.将字符串存放到字符数组中
public void getChars(int start,int end,char c[ ],int offset)
public char[ ] toCharArray()
字符串对象调用getChars()方法将得到字符串从位置start到end-1位置上的字符复制到数组c中,并从数组的offset位置开始存放这些字符,需要保证数组c能够容纳下被复制的数组
调用toCharArray()将字符串中的全部字符存放在一个字符数组中,返回这个字符数组。
字符串与字符数组
1.String类的构造方法String(byte[ ] a)用指定的字节数组构造一个字符串对象
String(byte[] a,int offset,int length) 用指定的字节数组的一部分,即从数组起始位置offset开始取length个 字节 构造一个字符串对象
2.将当前字符串转化为一个字节数组public byte[] getBytes() ,方法使用平台默认的字符编码,将当前字符串转化为一个字节数组。
public byte[] getBytes(String charsetName)
使用参数指定字符编码,将当前字符串转化为一个字节数组。
(必须在try~catch语句中调用此方法 )
byte d[]="Java你好".getBytes();
//注意一个汉字占两个字节,所以d[4]和d[5]存放字符‘你’,d[6]和d[7]存放字符‘好’
System.out.println("数组d的长度是"+d.length); //输出8
String s=new String(d,6,2);
System.out.println(s);//输出:好
s=new String(d,0,6);
System.out.println(s);// 输出:Java你
字符串的加密算法
利用字符串和数组的关系,使用一个字符串password作为密码对另一个字符串sourceString进行加密,操作过程如下。
将密码password存放到一个字符数组中:
char [] p=password.toCharArray();
假设数组p的长度为n,那么就将待加密的字符串sourceString按顺序以n个字符为一组,对每一组中的字符用数组a的对应字符做加法运算。例如,某组中的n个字符是
那么按如下方式得到对该组字符的加密的结果 :
最后,将字符数组c转化为字符串得到sourceString的密文。
正则表达式
1.正则表达式
一个正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称作正则表达式中的元字符。比如,“\dhello”中的\d就是有特殊意义的元字符,代表0到9中的任何一个。字符串对象调用 public boolean matches(String regex)方法可以判断当前字符串对象是否和参数regex指定的正则表达式匹配。
2.字符串的替换
字符串对象调用
public String replaceAll(String regex,String replacement)方法返回一个字符串,该字符串是当前字符串中所有和参数regex指定的正则表达式匹配的子字符串被参数replacement指定的字符串替换后的字符串,例如:
String result=“12hello567”.replaceAll("\d+",“你好”); 那么result就是:“你好hello你好”
字符串的分解
字符串调用public String[] split(String regex)使用参数指定的正则表达式regex做为分隔标记分解出其中的单词,并将分解出的单词存放在字符串数组中。例如,对于字符串: str=“1931年09月18日晚, 日本发动侵华战争, 请记住这个日子!”;
使用正则表达式:String regex="\D+"; 做为分隔标记分解出str中的单词:
String digitWord[]=str.split(regex); 那么,digitWord[0]、digitWord[1]和digitWord[2]就分别是"1931"、“09"和"18”。
StringBuffer类
String类创建的字符串是不可修改的,也就是说,String字符串不能修改,删除或替换字符串中的某个字符,即String对象一旦创建,那么实体是不可以再发生改变
StringBuffer类能创建可修改的字符串,也就是说该类对象的实体的内存空间可以自动改变大小,便可以存放一个可变的字符序列。
构造方法
1.StringBuffer()
使用该构造方法创建一个StringBuffer对象,那么分配给该对象的实体的初始容量可以容纳16个字符,当该对象的实体存放的字符序列的长度大于16,则实体的容量可以自动地增加,以便存放所增加的字符。StringBuffer对象可以通过调用length()方法获取实体中存放的字符串序列的长度,通过调用capacity()方法可以获取当前实体的实际容量
2.StringBuffer(int size)
使用该构造方法创建一个StringBuffer对象,那么分配给该对象的实体的初始容量为size指定的字符个数,当该对象的实体存放的字符序列的长度大于16,则实体的容量可以自动地增加,以便存放所增加的字符。
3.StringBuffer(String s)
使用该构造方法创建一个StringBuffer对象,那么分配给该对象的实体的初始容量为参数字符串s的长度额外再加16个字符。当该对象的实体存放的字符序列的长度大于现容量时,则实体的容量可以自动地增加,以便存放所增加的字符。
常用方法
1.StringBuffer append(String s)将一个字符串对象追加到当前StringBuffer对象中 ,返回当前StringBuffer对象的引用
StringBuffer append(int n):将一个int型数据转化为字符串对象后再追加到当前StringBuffer对象中
StringBuffer append(Object o):将一个Object对象的字符串表示追加到当前StringBuffer对象中
类似的方法还有:
StringBuffer append(long n),StringBuffer append(boolean n),
StringBuffer append(float n),StringBuffer append(double n),
StringBuffer append(char n)
2.public char charAt(int n ):得到参数n指定的置上的单个字符
public void setCharAt(int n ,char ch):将当前StringBuffer对象实体中的字符串位置n处的字符用参数ch指定的字符替换
注意:字符串序列的第一个字符的位置为0,参数n的值必须是非负的,且小于当前对象实体中字符串序列的长度
3.StringBuffer insert(int index, String str) 将参数str指定的字符串插入到参数index指定的位置
插完后str的第一个字符的位置就是index位置
4.public StringBuffer reverse() :将该对象实体中的字符翻转
5.StringBuffer delete(int startIndex, int endIndex) :从当前StringBuffer对象实体中的字符串中删除一个子字符串 ,该子串是从startIndex到endIndex-1
其相关方法: deleteCharAt(int index) 删除当前StringBuffer对象实体的字符串中index位置处的一个字符
6. StringBuffer replace( int startIndex ,int endIndex, String str) :将当前StringBuffer对象实体中的字符串的一个子字符串用参数str指定的字符串替换 ,位置该子串是从startIndex到endIndex-1位置
Date类
1.使用Date类的无参数构造方法创建的对象可以获取本地当前时间。
例: Date nowTime=new Date();
2.使用Date类的带参数构造方法 Date(long time)
例:Date date1=new Date(1000),
date2=new Date(-1000);
Date对象表示时间的默认顺序是:星期、月、日、小时、分、秒、年。
例如:Tue Aug 04 08:59:32 CST 2009。
使用java.util包中的DateFormat的子类SimpleDateFormat来实现日期的格式化。
SimpleDateFormat有一个常用构造方法:public SimpleDateFormat(String pattern);
该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:public String format(Date date)方法格式化时间对象date。 pattern是由普通字符和一些称作格式符组成的字符序列。如,假如当前时间是2009年10月11日星期日,设pattern= “yyyy-MM-dd”
那么使用pattern格式化后的时间就是:2009-10-11
Date nowTime=new Date();
System.out.println(nowTime);//输出:Sun Dec 27 10:50:01 CST 2020
String pattern="yyyy-MM-dd";
SimpleDateFormat SDF=new SimpleDateFormat(pattern);
System.out.println(SDF.format(nowTime)); //输出:2020-12-27
Calendar类
Calendar类在java.util包中。使用Calendar类中的static方法getInstance()可以初始化一个日历对象,如:Calendar calendar=Calendar.getInstance();
Calendar对象可以调用方法:
public final void set (int year,int month,int date)
public final void set (int year,int month,int date,int hour,int minute)
public final void set (int year,int month,int date,int hour,int minute,int second)将日历翻到任何一个时间,当year为负数时表示公元前
Calendar对象调用public int get(int field)可以获取有关年份、月份、小时、星期等信息,参数field的有效值由Calendar的静态常量指定
Calendar对象调用public long getTimeMillis()可以将时间表示为毫秒
System类
如果一个Java程序希望立刻关闭运行当前程序的Java虚拟机,那么就可以让System类调用exit(int status),并向该方法的参数传递数字0或非0的数字。传递数字0表示是正常关闭虚拟机,否则表示非正常关闭虚拟机。
System.gc();用于调用垃圾收集器