1 String类
String类为final类,String对象的实体不能发生变化
1.1 构造String对象
- 可以用String类声明对象,例如:
String s= new String("i am a student"); - 也可以用一个已创建的String对象创建另一个String对象,例如:
String tom=new String(s); - 可以用字符数组创建String类的对象:
char a[]={'b','o','y'};
String a=new String(a);
//相当于 String s= new String("boy");
- 构造方法String(char a[], int startIndex, int count)提取字符数组a中从startIndex个字符开始的count个字符
char a[]={'s','o','k','h','l'}
String s= new String(a,1,2);
//相当于String s =new String("ok");
1.2 String类常用方法
1. length()
String a=new String("hello");
int m=a.length();
int ,n="hi".length();
//m值为5,n值为2
2. equals(String s)
比较当前String对象是否与参数s指定的Sting对象字符序列相同
String tom=new String("1");
String sam=new String("0");
String rick=new String("1");
tom.equals(sam); //值为false
tom.equals(rick); // 值为true
/*因为tom和rick是对象,存放着引用,
但是tom和rick引用不同,
所以tom==rick是false*/
equalsIgonreCase(String s)比较时可忽略大小写
3. startsWith(String s) 、 endsWith(String s)
String tom="123456";
String sam="654321";
tom.startsWtih("12"); // true
sam.endsWith("21"); //true
4. regionMatches(int firstStart, String other, int otherStart, int length)
从当前String对象的字符序列firstStart位置开始,取长度为length的字符序列,与参数other的一个子字符序列。其中other的子字符序列是从otherStart位置开始,取length长度的子字符序列。如果相同就返回true
- 重载方法:
regionMatches(boolean b,int firstStart, String other, int otherStart, int length)
可以通过参数b决定是否忽略大小写,b取true就忽略
5. contains(String s)
判断当前String对象是否含有s的字符序列,含有就返回true
6. indexOf(String s)
从当前String对象的字符序列索引为止0开始检索,返回首次出现s的字符序列的位置,没有检索到就返回-1.
indexOf(String s , int startPoint)索引位置从startPoint开始检索
7. substring(int startpoint)
返回一个新的String对象,从startpoint开始截取到最后。
substring(int start,int end)从start截取到end
String tom="abcdefgh";
String s=tom.substring(2,5);
//s的字符序列是“cde”
1.3 String对象与基本数据的相互转化
1. String对象转化为数字
int x;
String s="123";
x=Integer.parseInt(s);
Byte、Short、Long、Float、Double类同理
- Long类中下列方法返回整数i的不同进制的字符序列表示:
String toBinaryString(long i); //二进制
String toOctalString(long i); //八进制
String toHexString(long i); //十六进制
String toString(long i, int p); //p进制
2.数组转化为String对象
- 任何数字和String常量""做并运算“+”,都将得到一个String对象:
String str=3.14+"";
那么str对象的字符序列就是3.14 - 还可以使用下列String类的类方法
public static String valueOf(byte n)
public static String valueOf(int n)
public static String valueOf(long n)
public static String valueOf(float n)
public static String valueOf(double n)
例如:
String strr= String.valueOf(123.555)
String对象str的字符序列就是123.555
1.4 对象的String表示
Object类的toString()方法,一个对象调用该方法返回一个String对象,称该String对象为当前对象的String表示
- 一个对象调用toString()方法返回的String对象的字符序列一般形式为:
创建对象的类的名字@对象的引用的字符序列表示
1.5 字符序列与字符、字节数组
1. 字符序列与字符 数组
- 将String对象字符序列放入数组的方法:
-
public void getChars(int start, int end, char c[], int offset)
将String对象字符序列从start到end的字符复制到数组c中,从数组c的offset位置开始存放这些字符。 -
public char[] getArray()
将String对象字符序列依次存放再一个字符数组的单元中,并且返回该数组的引用。
2. 字符序列与字节 数组
用指定的字节数组构造一个String对象:
String (byte[])
从offset位置取length个字节构造一个String对象:
String(byte[],int offset, int length)public byte[] getBytes():将字符序列转换为平台默认编码,将编码依次存放在byte数组的单元中,返回byte数组的引用public byte[] getBytes(String charsetName):将字符序列转换为参数charsetName指定编码,将编码依次存放在byte数组的单元中,返回byte数组的引用
2 正则表达式
2.1 正则表达式与元字符
- String对象调用
public boolean matches(String regex)判断当前String对象的字符序列是否和参数regex指定的正则表达式相匹配 - 元字符自行查表
注:由于“.”代表任何一个字符,所以在正则表达式中如果想使用普通意义的点字符,必须使用[.]或\\. - 限定符自行查表
2.2字符序列的替换与分解
String对象调用
public String replaceAll(String regex,String replacement)
返回一个新的String对象,其字符序列中所有和参数regex相匹配的子字符序列替换成参数replacement指定的字符序列,例如:
String s="12hello567";
String result=s.replaceAll("\\d+","你好,");
//result的字符序列为 你好hello你好
3 StringTokenizer类
- 用途:分析一个字符序列并将字符序列分解成可被单独使用的单词
- 构造方法:
-
StringTokenizer(String s):构造一个StringTokenizer对象,例如fenxi。fenxi使用默认的分隔标记分解出参数s的字符序列中的单词,即这些单词成为fenxi中的数据 -
StringTokenizer(String s, String delim):构造一个StringTokenizer对象,例如fenxi。fenxi用参数delim的字符序列中的字符的任意排列作为分隔标记,分解出参数s的字符序列中的单词,即这些单词成为fenxi中的数据
例如:
StringTokenizer fenxi=new StringTokenizer("we are student"); StringTokenizer fenxi=new StringTokenizer("we,are;student",", ;"); -
- fenxi调用String nextToken()方法逐个获取fenxi中的单词,每当nextToken()返回一个单词,fenxi就自动删除该单词;
- fenxi调用boolean hasMoreTokens()来判断fenxi中还有无单词,有就返回true;
- fenxi调用countTokends()返回当前fenxi中单词的个数。
4 Scanner类
Scanner类的对象从字符序列中解析程序所需要的数据
- 为了创建Scanner对象,需要把一个String对象传递给所构造的Scanner对象,例如,对于:
String s="hello,i am Tom";
为了解析出s的字符序列中的单词,可以如下构造一个Scanner对象:
Scanner scanner=new Scanner(s);
那么scanner默认使用空格作为分隔标记来解析s的字符序列中的单词。
也可以让Scanner对象调用方法useDelimiter(正则表达式)将正则表达式作为分隔标记
特点如下:
- scanner调用next()方法依次返回s的字符序列中的单词,如果全部返回完了,调用hasNext()将返回false,否则返回true
- scanner可以调用nextInt()或者nextDouble()将数字型单词转化为int或double数据返回
StringTokenizer和Scanner对比
- StringTokenizer类把分解出的全部单词存放到StringTokenizer对象的实体中,能快速获得单词,但对象实体**占用较多内存
- Scanner类仅存放怎样获取单词的分隔标记(相当于把单词在字典里,大脑只记查字典的规则),获得单词的速度较慢,但是节省内存空间
5 Pattern与Matcher类
模式匹配就是检索和指定模式匹配的字符序列
6 StringBuffer类
6.1 对象的创建
该类的对象实体内存空间可以自动改变大小,便于存放可变的字符。例如一个StringBuffer对象调用append方法可以添加字符序列:
StringBuffer buffer=new StringBuffer("hello");
buffer.append(",i am Tom.");
//buffer对象的实体变成“hello, i am Tom”
- 三个构造方法
- StringBuffer():使用该方法创建对象,该对象的实体初始容量可以容纳16个字符,对象的尸体存放的字符序列长度大于16时,容量自动增加。通过length()获取存放的字符序列的长度,通过capacity()获取当前实体的实际容量
- StringBuffer(int size):初始容量为size个字符
- StringBuffer(String s):初始容量为s的字符序列的长度再加16个字符
6.2 常用方法
6.2.1. append方法
- StringBuffer append(String s):将s的字符序列追加到当前StringBuffer对象中,并返回当前StringBuffer对象的引用
- StringBuffer append(int n):将n作为字符序列尾加到当前对象的字符序列,并返回当前对象的引用
(类似的long、boolean、float、double、char)
6.2.2
- public char charAt(int n):得到参数n指定位置上的单个字符。n大于0,小于当前对象的字符序列长度
- public void setCharAt(int n, char ch):将n位置出的字符用参数ch指定的字符替换。n大于0,小于当前对象的字符序列长度
6.2.3
- StringBuffer insert(int index, String str):将参数str指定的字符序列插入参数index指定的位置,并返回当前对象的引用
6.2.4
public StringBuffer reserve():将字符序列反转,并返回当前对象的引用
6.2.5
- StringBuffer delete(int startIndex, int endIndex):删除从startIndex到endIndex-1的子字符序列
- StringBuffer deleteCharAt(int index):删除index位置的字符
6.2.6
StringBuffer replace(int startIndex, int endIndex, String str):将从startIndex到endIndex-1的子字符序列替换成参数str指定的字符序列,返回对象的引用。
7 日期和时间
相关方法自行查阅