老生常谈Java字符串进阶(必看篇)
前言
最常用的对字符串操作的类有三个,分别是String,StringBuilder,StringBuffer,下面将会详细的说说这三个类......
String
String类代表字符串,这个是最基本的对字符串的类,这个也是使用比较多的类,这里就不再详细介绍了
newString(Stringstr)
newString(StringBuilderstr)
newString(StringBufferstr)
newString(byte[]bys,StringcharsetName)通过使用指定的字符集解码指定的byte子数组,构造一个新的String。
常用方法
strcharAt(intindex)返回指定索引处的字符
Stringconcat(Stringstr)将指定字符串str连接到此字符串的结尾,返回连接成功后的字符,因此需要接受才能有效果
booleancontains(CharSequences)判断此字符串是否包含指定的char值序列,这里的CharSequence是一个接口,可以直接使用它的子类作为参数(String,StringBuffer,StringBuild)
staticStringcopyValueOf(char[]c)将字符数组变成字符串并且返回
staticStringcopyValueOf(char[]c,intoff,intcount)将截取的字符数组变成字符串并且返回,off是开始截取的下标,count是截取的个数
booleanendWith(Strings)判断字符串是否是以s结尾
booleanequals(Objecto)用于比较
intindexOf(charc)返回字符c在字符串中第一次出现的索引
intindexOf(charc,intfromIndex)从指定索引处开始搜索,查找第一次出现的索引
intindexOf(Stringstr)返回指定子字符串在此字符串中第一次出现处的索引。
intindexOf(Stringstr,intfromIndex)返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
booleanisEmpty()
intlength()
booleanmatches(Stringregex)是否匹配正则表达式
trim()返回字符串的副本,忽略前导空白和尾部空白。
Stringsubstring(intbeginIndex)返回一个新的字符串,它是此字符串的一个子字符串。
Stringsubstring(intbeginIndex,intendIndex)返回一个新字符串,它是此字符串的一个子字符串。
StringtoUpperCase()使用默认语言环境的规则将此String中的所有字符都转换为大写。
String[]split(Stringregex)根据给定正则表达式的匹配拆分此字符串。
String[]split(Stringregex,intlimit)根据匹配给定的正则表达式来拆分此字符串。
char[]toCharArray()将此字符串转换为一个新的字符数组。
byte[]getBytes(Charsetcharset)使用给定的charset将此String编码到byte序列,并将结果存储到新的byte数组
注意
上面的newString(byte[]bys,StringcharsetName)这个构造方法很重要,它可以改变字符串的编码集(和byte[]getBytes(Charsetcharset))配合着使用,下面我们来看一个例子,代码如下:
/* *InputStreamReader实现了将字节流FileInputStream转换为字符流,然后使用转换来的字节流创建高效流,从而实现高效的读写 */ /* *编码集(我的eclipse编辑器默认的是utf-8 *下面将中文字符串的编码集变为GBK写入a.txt文件,因为a.txt默认的是utf-8的因此这里在文件中显示的是乱码 *然后我们读出来的还是GBK的,因为我们写入的是GBK编码集的,但是我的eclipse是utf-8的编码集,因此在控制台上输出的还是乱码 *newString(byte[]bys,String *charsetName)使用这个构造方法将byte数组改变编码集并且转换为utf-8格式的,那么这次在控制台上输出的就不乱码了 */ //将GBK格式的中文写入a.txt文件 Filefile=newFile("src/a.txt"); FileOutputStreamfileOutputStream=newFileOutputStream(file); Stringstr="中"; byte[]by=str.getBytes("GBK");//将字符串改为GBK编码集 fileOutputStream.write(by); fileOutputStream.close(); //从a.txt文件中读取中文 FileInputStreamfileInputStream=newFileInputStream(file); intlen; byte[]bys=newbyte[4]; while((len=fileInputStream.read(bys))!=-1){ System.out.println(newString(bys,"GBK")); } fileInputStream.close();
StringBuffer
线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改。当然最重要的一点就是线程安全,我们可以从它的源码中可以看出,对于一些操作(append,insert..)都是使用了线程控制块来实现同步,适合与多线程下的使用,源代码如下:
publicsynchronizedStringBufferappend(Objectobj){ super.append(String.valueOf(obj)); returnthis; } publicsynchronizedStringBufferappend(Stringstr){ super.append(str); returnthis; } publicsynchronizedStringBufferdelete(intstart,intend){ super.delete(start,end); returnthis; } /** *@throwsStringIndexOutOfBoundsException{@inheritDoc} *@since1.2 */ publicsynchronizedStringBufferdeleteCharAt(intindex){ super.deleteCharAt(index); returnthis; }
构造
newStringBuffer(StringBuilderstr)
newStringBuffer(Stringstr)
常用的方法
StringBufferappend(str)将指定类型的str追加到此字符串的后面(String,char,char[],int,double,float,long,StringBuffer,StringBuilder)
StringBufferinsert(intoffest,str)将指定类型的str插入到此序列中,offest表示开始插入的位置的索引,类型有String,char,char[],int,double,float,long,StringBuffer,StringBuilder
Stringdelete(intfromIndex,intendIndex)移除此序列中的字符串并且返回新的缓冲字符串
StringBufferreverse()反转字符串
Stringsubstring(intstart)返回一个新的String,它包含此字符序列当前所包含的字符子序列。
Stringsubstring(intstart,intend)返回一个新的String,它包含此序列当前所包含的字符子序列。
StringBufferdeleteCharAt(intindex)移除此序列指定位置的char。
intlength()长度
StringtoString()返回此序列中数据的字符串表示形式。
StringBuilder
建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。但是这个类不是线程安全的,只适合单线程,如果使用多线程推荐使用StringBuffer,当然使用这个也行,不过需要自己实现同步
构造方法
newStringBuilder(Stringstr)
常用方法
这个类的常用方法和StringBuffer的一样,这里就不再一一列举了,参照上面的即可使用
以上这篇老生常谈Java字符串进阶(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。