最经常使用的对字符串操做的类有三个,分别是String,StringBuilder,StringBuffer,下面将会详细的说说这三个类......java
String类表明字符串,这个是最基本的对字符串的类,这个也是使用比较多的类,这里就再也不详细介绍了正则表达式
new String(String str)
new String(StringBuilder str)
new String(StringBuffer str)
new String(byte[] bys,String charsetName)
经过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。
str charAt(int index)
返回指定索引处的字符String concat(String str)
将指定字符串str链接到此字符串的结尾,返回链接成功后的字符,所以须要接受才能有效果boolean contains(CharSequence s)
判断此字符串是否包含指定的char值序列,这里的 CharSequence是一个接口,能够直接使用它的子类做为参数(String,StringBuffer,StringBuild)static String copyValueOf(char[] c)
将字符数组变成字符串而且返回static String copyValueOf(char[] c,int off,int count)
将截取的字符数组变成字符串而且返回,off是开始截取的下标,count是截取的个数boolean endWith(String s)
判断字符串是不是以s结尾boolean equals(Object o)
用于比较int indexOf(char c)
返回字符c在字符串中第一次出现的索引int indexOf(char c,int fromIndex)
从指定索引处开始搜索,查找第一次出现的索引int indexOf(String str)
返回指定子字符串在此字符串中第一次出现处的索引。int indexOf(String str,int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。boolean isEmpty()
int length()
boolean matches(String regex)
是否匹配正则表达式trim()
返回字符串的副本,忽略前导空白和尾部空白。String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。String toUpperCase()
使用默认语言环境的规则将此 String 中的全部字符都转换为大写。String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。String[] split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。char[] toCharArray()
将此字符串转换为一个新的字符数组。byte[] getBytes(Charset charset)
使用给定的charset
将此String
编码到byte
序列,并将结果存储到新的 byte 数组
- 上面的new String(byte[] bys,String charsetName)这个构造方法很重要,它能够改变字符串的编码集(和byte[] getBytes(Charset charset))配合着使用,下面咱们来看一个例子,代码以下:
/* * InputStreamReader实现了将字节流FileInputStream转换为字符流,而后使用转换来的字节流建立高效流,从而实现高效的读写 */ /* * 编码集(个人eclipse编辑器默认的是utf-8 * 下面将中文字符串的编码集变为GBK写入a.txt文件,由于a.txt默认的是utf-8的所以这里在文件中显示的是乱码 * 而后咱们读出来的仍是GBK的,由于咱们写入的是GBK编码集的,可是个人eclipse是utf-8的编码集,所以在控制台上输出的仍是乱码 * new String(byte[] bys,String * charsetName)使用这个构造方法将byte数组改变编码集而且转换为utf-8格式的,那么此次在控制台上输出的就不乱码了 */ // 将GBK格式的中文写入a.txt文件 File file = new File("src/a.txt"); FileOutputStream fileOutputStream = new FileOutputStream(file); String str = "中"; byte[] by = str.getBytes("GBK"); // 将字符串改成GBK编码集 fileOutputStream.write(by); fileOutputStream.close(); //从a.txt文件中读取中文 FileInputStream fileInputStream = new FileInputStream(file); int len; byte[] bys = new byte[4]; while ((len = fileInputStream.read(bys)) != -1) { System.out.println(new String(bys, "GBK")); } fileInputStream.close();
线程安全的可变字符序列。一个相似于
String
的字符串缓冲区,但不能修改。固然最重要的一点就是线程安全,咱们能够从它的源码中能够看出,对于一些操做(append
,insert
..)都是使用了线程控制块来实现同步,适合与多线程下的使用,源代码以下:数组
public synchronized StringBuffer append(Object obj) { super.append(String.valueOf(obj)); return this; } public synchronized StringBuffer append(String str) { super.append(str); return this; } public synchronized StringBuffer delete(int start, int end) { super.delete(start, end); return this; } /** * @throws StringIndexOutOfBoundsException {@inheritDoc} * @since 1.2 */ public synchronized StringBuffer deleteCharAt(int index) { super.deleteCharAt(index); return this; }
new StringBuffer(StringBuilder str)
new StringBuffer(String str)
StringBuffer append(str)
将指定类型的str追加到此字符串的后面(String,char,char[],int,double,float,long,StringBuffer,StringBuilder
)StringBuffer insert(int offest, str)
将指定类型的str插入到此序列中,offest表示开始插入的位置的索引,类型有 String,char,char[],int,double,float,long,StringBuffer,StringBuilderString delete(int fromIndex,int endIndex)
移除此序列中的字符串而且返回新的缓冲字符串StringBuffer reverse()
反转字符串String substring(int start)
返回一个新的 String,它包含此字符序列当前所包含的字符子序列。String substring(int start, int end)
返回一个新的 String,它包含此序列当前所包含的字符子序列。StringBuffer deleteCharAt(int index)
移除此序列指定位置的 char。int length()
长度String toString()
返回此序列中数据的字符串表示形式。
建议优先采用该类,由于在大多数实现中,它比
StringBuffer
要快。可是这个类不是线程安全的,只适合单线程,若是使用多线程推荐使用StringBuffer
,固然使用这个也行,不过须要本身实现同步安全
new StringBuilder(String str)
这个类的经常使用方法和
StringBuffer
的同样,这里就再也不一一列举了,参照上面的便可使用多线程