8.1 String类
可以使用String类声明对象并创建对象,例如:
String s = new String("we are students");
String t = new String("we are students");
String类还有两个较常用的构造方法。
(1)String (char a[])用一个字符数组a创建一个String对象,如:
char a[] = {'J','a','v','a'};
String s = new String(a);
过程相当于
String s = new String("Java");
(2)String(char a[],int startIndex,int count) 提取字符数组a中的一部分字符创建一个String对象,参数startIndex和count分别指定在a中提取字符的起始位置和从该位置开始截取的字符个数,如:
char a[] = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
String s = new String(a,2,4);
相当于 String s = new String("贰叁肆伍");
(3)引用String常量
(4)String对象可以用“+”进行并置运算,即首尾相接得到一个新的String对象。
(5)String 类的常用方法
1)public int length():获取一个字符串的长度
2)public boolean equals(String s):判断当前String对象的字符序列是否与参数s指定的String对象的字符序列相同
3)public boolean startsWith(String s)判断当前String对象的字符序列前缀是否是参数指定的String对象s的字符序列。
4) public int compareTo(String s):按字典序与参数s指定的字符序列比较大小。
5)public boolean contains(String s):String对象调用contains方法判断当前String对象的字符序列是否包含参数s的字符序列,例如,tom="student",那么tom.contains("stu")的值就是true,而tom.contains("ok")的值是false。
6)public int indexOf (String str):String对象调用方法从当前String对象的字符序列的0索引位置开始检索首次出现str的字符序列的位置,并返回该位置。如果没有检索到,该方法返回的值是–1,其相关方法:
indexOf(String s ,int startpoint)
lastIndexOf (String s)
例如 String tom = "I am a good cat";
tom.indexOf("a");//值是2
tom.indexOf("good",2);//值是7
tom.indexOf("a",7);//值是13
tom.indexOf("w",2);//值是-1
7)public String substring(int startpoint):字符串对象调用该方法获得一个新的String对象,新的String对象的字符序列是复制当前String对象的字符序列中的startpoint位置至最后位置上的字符所得到的字符序列。String对象调用substring(int start ,int end)方法获得一个新的String对象,新的String对象的字符序列是复制当前String对象的字符序列中的start位置至end–1位置上的字符所得到的字符序列。
8)public String trim() :得到一个新的String对象,这个新的String对象的字符序列是当前String对象的字符序列去掉前后空格后的字符序列。
如果当前String对象的字符序列与s的相同,该方法返回值0,如果大于s的字符序列,该方法返回正值;如果小于s的字符序列,该方法返回负值。
(6)字符串与基本数据的相互转化
Java.lang包中的Integer类调用其类方法:
public static int parseInt(String s)
可以使用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)
String str = String.valueOf(12313.9876);
(7)对象的字符串表示
在子类中我们讲过,所有的类都默认是java.lang包中Object类的子类或间接子类。Object类有一个
public String toString()
方法,一个对象通过调用该方法可以获得该对象的字符序列表示。一个对象调用toString()方法返回的String对象的字符序列的一般形式为:
创建对象的类的名字@对象的引用的字符串表示
(8)字符串与字符、字节数组
1)字符串与字符数组
String 类的构造方法:
–String(char[]);
–String(char[],int offset,int length)分别用字符数组中的全部字符和部分字符创建字符串对象
将String对象的部分字符序列存放到数组中的方法:
– public void getChars(int start,int end,char c[],int offset )
将String对象的字符序列存放到数组中的方法
public char[] toCharArray()
2)字符串与字节数组
String(byte[])用指定的字节数组构造一个字符串对象。
–String(byte[],int offset,int length) 用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。
–public byte[] getBytes()使用平台默认的字符编码,将当前String对象的字符序列存放到字节数组,并返回数组的引用。
–public byte[] getBytes(String charsetName)使用参数指定字符编码,将当前String对象的字符序列存放到字节数组,并返回数组的引用。
(9)字符串的加密算法
char [] p = password.toCharArray();
(10)正则表达式
正则表达式是一个String对象的字符序列,该字符序列中含有具有特殊意义字符,这些特殊字符称做正则表达式中的元字符。比如,"\\dcat"中的\\d就是有特殊意义的元字符,代表0到9中的任何一个,"0cat","1cat","2cat",…,"9cat"都是和正则表达式"\\dcat"匹配的字符序列。
String对象调用public boolean matches(String regex)方法可以判断当前String对象的字符序列是否和参数regex指定的正则表达式匹配。
在正则表达式中可以用方括号括起若干个字符来表示一个元字符,该元字符代表方括号中的任何一个字符。例如String regex = "[159]ABC",那么"1ABC"、"5ABC"和"9ABC"都是和正则表达式regex匹配的字符序列。例如,[abc]:代表a、b、c中的任何一个;[^abc]:代表除了a、b、c以外的任何字符;[a-zA-Z]:代表英文字母(包括大写和小写)中的任何一个。
#字符串的替换
public String replaceAll(String regex,String replacement)
String对象调用public String replaceAll(String regex,String replacement)方法返回一个新的String对象,这个新的String对象的字符序列是把当前String对象的字符序列中所有和参数regex匹配的子字符序列,用参数replacement的字符序列替换后得到字符序列,例如:
String str ="12hello567bird".replaceAll("[a-zA-Z]+","你好");
那么str的字符序列就是将"12hello567bird"中所有英文字符序列替换为"你好"后得到的字符序列,即str的字符序列是"12你好567你好"。
#字符串的分解
public String[] split(String regex)使用参数指定的正则表达式regex做为分隔标记分解出其中的单词,并将分解出的单词存放在字符串数组中。
例如,对于字符串str
String str = "1949年10月1日是中华人民共和国成立的日子";
如果准备分解出全部由数字字符组成的单词,就必须用非数字字符串做为分隔标记,因此,可以使用正则表达式:String regex="\\D+";
做为分隔标记分解出str中的单词:String digitWord[]=str.split(regex);
那么,digitWord[0]、digitWord[1]和digitWord[2]就分别是“1949”、“10”和“1”。
8.3 Scanner类
(1)Scanner对象可以解析字符序列中的单词,例如,对于String对象NBA
String NBA = "I Love This Game";
为了解析出NBA的字符序列中的单词,可以如下构造一个Scanner对象。
Scanner scanner = new Scanner(NBA);
Scanner对象可以调用方法
useDelimiter(正则表达式);
将正则表达式作为分隔标记,即让Scanner对象在解析操作时,把与正则表达式匹配的字符序列作为分隔标记。如果不指定分隔标记,那么Scanner对象默认地用空白字符:空格,制表符,回行符作为分隔标记来解析String对象的字符序列中的单词。
(2)Scanner对象可以解析字符序列中的单词,例如,对于String对象NBA
String NBA = "I Love This Game";
为了解析出NBA的字符序列中的单词,可以如下构造一个Scanner对象。
Scanner scanner = new Scanner(NBA);
Scanner对象可以调用方法
useDelimiter(正则表达式);
将正则表达式作为分隔标记,即让Scanner对象在解析操作时,把与正则表达式匹配的字符序列作为分隔标记。如果不指定分隔标记,那么Scanner对象默认地用空白字符:空格,制表符,回行符作为分隔标记来解析String对象的字符序列中的单词。
(3)使用正则表达式作为分隔标记解析字符串
Scanner对象可以调用 useDelimiter(正则表达式); 方法将一个正则表达式作为分隔标记,即和正则表达式匹配的字符串都是分隔标记。
使用正则表达式:
String regex= "[^0123456789.]+" //(匹配所有非数字字符序列)
作为分隔标记,解析"市话76.8元,长途:167.38元,短信12.68元",以及"牛奶:8.5圆,香蕉3.6圆,酱油:2.8圆"中的价格,并计算价格之和。
8.4 StringBuffer类
StringBuffer类的对象的实体的内存空间可以自动地改变大小,便于存放一个可变的字符序列。
(1)常用类
1) StringBuffer append(String s):将String对象s的字符序列追加到当前StringBuffer对象的字符序列中,并返回当前StringBuffer对象的引用
StringBuffer append(int n):将int型数据n转化为String对象,再把该String对象的字符序列追加到当前StringBuffer对象的字符序列中,并返回当前StringBuffer对象的引用
StringBuffer append(Object o):将一个Object对象o的字符序列表示追加到当前String- Buffer对象的字符序列中,并返回当前StringBuffer对象的引用
类似的方法还有:
StringBuffer append(long n),StringBuffer append(boolean n),
StringBuffer append(float n),StringBuffer append(double n),
StringBuffer append(char n)
2)public chat charAt(int n ):得到参数n指定的置上的单个字符
public void setCharAt(int n ,char ch):将当前StringBuffer对象实体中的字符串位置n处的字符用参数ch指定的字符替换。
3)StringBuffer insert(int index, String str) :将参数str指定的字符串插入到参数index指定的位置
4)public StringBuffer reverse() :将该对象实体中的字符翻转
5)StringBuffer delete(int startIndex, int endIndex):从当前StringBuffer对象实体中的字符串中删除一个子字符串
其相关方法:deleteCharAt(int index) 删除当前StringBuffer对象实体的字符串中index位置处的一个字符。
6)StringBuffer replace(int startIndex,int endIndex,String str):将当前StringBuffer对象实体中的字符串的一个子字符串用参数str指定的字符串替换。