String相关方法
简要介绍三个相关术语之间的关系
String,StringBuilder以及StringBuffer这三个类之间有什么区别
1.运行速度
在这方面运行速度快慢为:StringBuilder > StringBuffer > String,由于String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
2.线程安全
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的。如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
总结起来就是:
- String:适用于少量的字符串操作的情况
- StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
- StringBuffer:适用多线程下在字符缓冲区进行大量操作(值需要经常更改)的情况
操作方法
String类的基本操作,可分为以下几类:1、基本操作方法 2、字符串比较 3、字符串与其他数据类型之间的转换 4、字符与字符串的查找 5、字符串的截取与拆分 6、字符串的替换与修改。
基本操作方法
1.获取字符串长度方法length()
int length = str.length();
此处,我想起来JavaScript笔试见到的一个题:如果要设置若干时间执行某函数,该函数不能有括号,否则就是立即调用
func setTimeout(func1,10000);
....
2.获取字符串中的第i个字符方法charAt(i)
char ch = str.charAt(i); //i为字符串的索引号,*保存到*字符变量中
3.获取指定位置的字符方法getChars(…)
str.getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
示例
public class Test {
public static void main(String args[]) {
String Str1 = new String("www.runoob.com");
char[] Str2 = new char[6];
try {
**Str1.getChars(4, 10, Str2, 0);**
System.out.print("拷贝的字符串为:" );
System.out.println(Str2 );
} catch( Exception ex) {
System.out.println("触发异常...");
}
}}
输出
拷贝的字符串为:runoob
4.endsWith() 方法测试字符串是否以指定的后缀结束
public boolean endsWith(String suffix)
//suffix -- 指定的后缀
字符串比较
主要分为两大类:一类是字符串大小的比较(根据Unicode);还有一类比较方法就是比较两个字符串是否相等。
1.不忽略字符串大小写情况下字符串的大小比较方法compareTo(another str)
int result = str1.compareTo(str2);
2.忽略字符串大小写情况下字符串的大小比较方法compareTOIgnoreCase(another str)
int result = str1.compareToIgnoreCase(str2);
3.不忽略字符串大小写情况下判别字符串相等的方法eaquals(another str)
boolean result = str1.equals(str2);
4.忽略字符串大小写情况下判别字符串相等的方法equalsIgnoreCase(another str)
boolean result = str1.equals(str2);
字符串与其他数据类型的转换
用的较少,等到用到时候再行补充
字符(串)查找
1.indexOf()方法
str.indexOf(char ch);
str.indexOf(char ch,int startIndex); 闭区间,从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。
2.lastIndexOf()方法
str.lastIndexOf(ch);
str.lastIndexOf(ch,fromIndex);
截取与拆分
截取出一个长字符串中的一个子字符串或将字符串按照正则表达式的要求全部拆分保存到一个字符串数组中。
1.substring()方法
//左闭
String result = str.substring(startindex);
//左闭右开
String result = str.substring(beginIndex,EndIndex)
2.拆分split()方法
// 拆分的结果保存到字符串数组中
String strArray[] = str.split(正则表达式);
String strArray[] = str.split(正则表达式,limit);
示例
public class Test {
public static void main(String args[]) {
String str = new String("Welcome-to-Runoob");
System.out.println("- 分隔符返回值 :" );
for (String retval: str.split("-")){
System.out.println(retval);
}
System.out.println("");
System.out.println("- 分隔符设置分割份数返回值 :" );
for (String retval: str.split("-", 2)){
System.out.println(retval);
}
System.out.println("");
String str2 = new String("www.runoob.com");
System.out.println("转义字符返回值 :" );
for (String retval: str2.split("\\.", 3)){
System.out.println(retval);
}
System.out.println("");
String str3 = new String("acount=? and uu =? or n=?");
System.out.println("多个分隔符返回值 :" );
for (String retval: str3.split("and|or")){
System.out.println(retval);
}
}
}
输出
- 分隔符返回值 :Welcome
toRunoob
- 分隔符设置分割份数返回值 :Welcome
to-Runoob
转义字符返回值 :
www
runoob
com
多个分隔符返回值 :
acount=?
uu =?
n=?
替换或修改
1.concat()方法合并字符串
String result = str1.concat(str2); //将str1和str2合并
2 toLowerCase()方法 将字符全部转化为小写
String result = str.toLowerCase();
3 toUpperCase()方法 将字符全部转化为大写
格式:String result = str.toUpperCase();
4 replaceAll()、replaceFirst()方法:需要匹配正则表达式
*5.append()方法
append(String str)/append(Char c):字符串连接
System.out.println("StringBuilder:"+strB.append("ch").append("111").append('c'));
//return "StringBuilder:ch111c"
6.setCharAt(int i, char c):将第 i 个代码单元设置为 c(可以理解为替换)
strB.setCharAt(2, 'd');
System.out.println("StringBuilder.setCharAt:" + strB);
//return "StringBuilder.setCharAt:chd11c"
7.toString():返回一个与构建起或缓冲器内容相同的字符串
System.out.println("String:"+strB.toString());
//return "String:ch111c"
8.insert(int offset, String str)/insert(int offset, Char c):在指定位置之前插入字符(串)
System.out.println("StringBuilder.insertString:"+ strB.insert(2, "LS"));
//return "StringBuilder.insertString:chLSd11c"
System.out.println("StringBuilder.insertChar:"+ strB.insert(2, 'L'));
//return "StringBuilder.insertChar:chLLSd11c"
9.delete(int startIndex,int endIndex):删除起始位置(含)到结尾位置(不含)之间的字符串
System.out.println("StringBuilder.delete:"+ strB.delete(2, 4));
//return "StringBuilder.delete:chSd11c"