第十章 字符串
1.String类提供了9个构造函数,以便使用各种方式初始化String对象。其中的7个如下:
s1=new String();//无参数构造函数;
s2=new String(s);//参数为字符串的构造函数;
s3=new String(charArray);//参数为字符数组的函数;
s4=new String(charArray,6,3);//参数为字符数组并拷贝以第二个参数为起始位置,第三个参//数为拷贝字符数目作为初始值;
s5=new String(byteArray,4,4);//参数为比特数组并拷贝以第二个参数为起始位置,第三个参数为拷贝字符数目作为初始值;
s6=new String(byteArray);//参数为比特数组;
s7=new String(buffer);//参数为StringBuffer;
2.charAt方法返回String中指定位置的字符。如:String1.charAt(i); getChars方法取String的某一子串。如:String1.getChars(0,5,charArray,0);第一个参数为被拷贝字符串中的起始拷贝的下标,第二个参数是被拷贝字符的数目,第三个参数为目标字符数组,第四个参数为拷贝的字符放在字符数组中的起始下标。
3.字符串的比较:equals,equalsIgnoreCase,CompareTo和reginMathes,其中equalsIgnoreCase将忽略大小写;CompareTo返回0时表示两个字符串相等,返回-1表示调用此方法的字符串小于比较的字符串,返回1则相反;reginMathes方法比较两个字符串对象的一部分是否相等,如:String1.regionMatches(0,s1,0,5);第一个参数是调用此方法的字符串的起始下标,第二个参数是要比较的字符串,第三个参数是要比较字符串中的起始下标,第四个参数是要比较的字符的个数。只有当指定个数的字符在按字典中发比较都相同时,才返回True。
在使用“==“比较引用时,如果两个引用指向内存中的同一个对象,则结果为true;而在比较基本数据类型的指时,如果两个值相同,则结果为true。
4.String类的startsWith和endsWith方法用于测试数组的元素是否以某些字符开始或结尾。如:string[i].startsWith(“st”); string[i].startsWith(“art”,2)判断strings中第i个字符串从下标2开始的子串是否以字符“art”开始;string[i].endsWith(“ed”);
5.indexOf方法在字符串中定位字符和子串,如:String1.indexOf(‘c’);String1.indexOf(‘a’,1);
其中第二个参数是在字符串中开始查找的起始下标。
6.substring方法用于从字符串中抽取子串,它有两种形式,如String1.substring(20),其中20是拷贝子串在源字符串中的起始下标;String1.substring(0,6);第一个参数指定在源字符串中需拷贝的起始下标,第二个参数指定拷贝的字符数目。
7.String类的其他方法:s1.concat(s2);字符串s1连接s2,并不改变s1,s2;
s1.replace(‘l’,’L’);替换s1中所有的l为L;
s1.toUpperCase(); s1.toLowerCase();分别转换为大写小写;
s1.trim(); 删除s1开头和末尾的空白字符;
s1.valueOf(l);可以使用多种类型的参数,并将多种类型的参数转换为字符串;
8.String类的intern方法可以改善字符串比较的性能,在第一次对某个String对象调用String
类的intern方法时,它将返回一个指向内存中该String对象的引用。当下次对与原String对象内容相同的不同String对象进行intern调用时,将产生对原String对象的多个引用。这样就可以进行高效的大型字符串的比较。一旦调用过intern方法,就可以用==比较String引用,而不必使用String类的equals等比较方法。
9.StringBuffer类,它可以创建和操纵动态字符串,即可以修改字符串,每个StringBuffer都能够存贮由它的容量所指定的一些字符,如果超过了StringBuffer的容量,容量则会自动扩大以容纳多出来的字符。它的构造函数由3种:buf1=new StringBuffer(); buf2=new StringBuff(6);其中6为初始容量;buf3=new StringBuffer(“hello”);
10.StringBuffer类的capacity方法返回它不另外分配空间可以存储的字符数。注意:带一个字符串参数的StringBuffer构造函数创建的StringBuffer对象的初始容量为参数字符串的长度加16。如:buf=new StringBuffer(“hello,how are you?”);返回的capacity为35。
buf.setLength(10);方法将StringBuffer的长度设置为10,如果指定的长度比当前的字符数目少,则超过指定长度的字符都将被舍弃;如果比当前字符数目多,则添加空字符至指定长度。
buf.ensureCapacity(75);将扩充StringBuffer的容量为至少75个字符。
buf.reverse();将倒置buf中的字符;
buf.append(b);将多种类型的数据的值添加到StringBuffer的末尾;实际上编译器用它实现了用于连接字符串的“+”和“+=”运算符。
buf.insert(0,b); 方法用于将多种类型的数据插入到StringBuffer中第一个参数指定的参数之前。
buf.delete(2,6);方法将删除以第一个参数为起始下标,第二个参数为字符数目的子串。
11.Character类的部分方法:
Character.isDefined(c);判断字符c在Unicode字符集中是否被定义,如果是则返回true,否则返回false;
Character.isJavaIdentifierPart(c);判断字符c是否能当作Java标识符的一部分;
Charater.forDigit(digit,radix);把整数digit转换为由整数radix(基数)指定的数制系统中相应的字符。如:Charater.foDigit(13,16)则返回d;
12.StringTokenizer类将字符串分解成组成字符串的语言符号,它的方法coutTokens返回语句符号化的字符串中含有的语句符号的个数;hasMoreTokens方法判断是否还有语言符号;
nextToken调用字符串的形式返回下一个语言符号。