前言:不管是技术面试还是日常工作中,都会经常遇到字符串处理算法,比如最长公共序列、最长公共子串和最长回文子串就属于字符串处理的常见操作。我们除了要掌握相关的动态规划算法,还得熟悉常用的Java字符串处理方法。
int length() : 返回此字符串的长度,也就是字符串中的包含的字符数。
char charAt(int index): 返回指定索引处的char值
int indexOf(int ch):返回的是ch在字符串中第一次出现的索引位置
int indexOf(int ch,int fromIndex):从formIndex指定位置开始,获取ch在字符串中出现的索引位置
int indexOf(String str):返回的是str在字符串中第一次出现的索引位置
int indexOf(String str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置
同样规则的还有lastIndexOf系列函数,不过它与indexOf函数取值方向相反,它是在字符串后边开始。
注意:
a.当访问到字符串中不存在的角标时会发生StringIndexOutOfBoundsException(角标越界异常),这也是使用字符串时,比较容易出现的异常。
b.当使用indexOf函数没有找到要寻找的字符或字符串时,返回-1。
c.lastIndexOf系列函数是反向索引一个字符出现位置,与indexOf方向相反,在字符串最后开始寻找。
lastIndexOf() 方法有以下四种形式:
public int lastIndexOf(int ch): 返回指定字符在此字符串中最后一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
public int lastIndexOf(int ch, int fromIndex): 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索,如果此字符串中没有这样的字符,则返回 -1。
public int lastIndexOf(String str): 返回指定子字符串在此字符串中最右边出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
public int lastIndexOf(String str, int fromIndex): 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索,如果此字符串中没有这样的字符,则返回 -1。
实例
public class Test {
public static void main(String args[]) {
String Str = new String("菜鸟教程:www.runoob.com");
String SubStr1 = new String("runoob");
String SubStr2 = new String("com");
System.out.print("查找字符 o 最后出现的位置 :" );
System.out.println(Str.lastIndexOf( 'o' ));
System.out.print("从第14个位置查找字符 o 最后出现的位置 :" );
System.out.println(Str.lastIndexOf( 'o', 14 ));
System.out.print("子字符串 SubStr1 最后出现的位置:" );
System.out.println( Str.lastIndexOf( SubStr1 ));
System.out.print("从第十五个位置开始搜索子字符串 SubStr1最后出现的位置 :" );
System.out.println( Str.lastIndexOf( SubStr1, 15 ));
System.out.print("子字符串 SubStr2 最后出现的位置 :" );
System.out.println(Str.lastIndexOf( SubStr2 ));
}
}
以上程序执行结果为:
查找字符 o 最后出现的位置 :17
从第14个位置查找字符 o 最后出现的位置 :13
子字符串 SubStr1 最后出现的位置:9
从第十五个位置开始搜索子字符串 SubStr1最后出现的位置 :9
子字符串 SubStr2 最后出现的位置 :16
boolean contains(str):字符串中是否包含某一个子字符串
例:str.contains(“Demo”); // 判断字符串str中是否包含” Demo”
与indexOf(str)对比:indexOf(str) 可以索引str第一次出现位置,如果返回-1,表示该str不在字符串中存在,所以indexOf(str)也可以用于对指定子串判断是否包含。
例:if(str.indexOf(aa)!=-1)
区别:indexOf(str)既可以判断是否包含子串,又可以获取该子串出现的位置。
boolean isEmpty():字符串中是否有内容。原理就是判断字符串长度是否为0
boolean startsWith(String prefix):字符串是否是以指定前缀开头
例:str. startsWith (“Array”); // 判断文件名称是否是Array单词开头
boolean endsWith(String suffix):字符串是否是以指定后缀结尾
例:str. endsWith (“.java”); // 判断文件名称是否是.java的文件
boolean equals(str):判断字符串内容是否相同。复写了Object类中的equals方法,只判断字符串内容是否相同
boolean equalsIgnoreCase():忽略大小写,判断内容是否相同
char[] toCharArray():将字符串转成字符数组
byte[] getBytes():将字符串转成字节数组
String(byte[]):将字节数组转成字符串
String(byte[],offset,count):将字节数组中的一部分转成字符串
static String valueOf(int): 将基本数据类型int转成字符串
static String valueOf(double):将基本数据类型转成字符串
String replace(oldchar,newchar):如果要替换的字符不存在,返回的还是原串
String concat(String str):将指定字符串参数连接到此字符串的结尾
在String中,subString()、concat()和replace()等等操作都不是在原有的字符串对象上进行的,而是生成了新的String对象,然后将原String的变量引用指向新生成的对象。
注意:
concat()方法:String类的concat()方法(只能用于拼接字符串,不能拼接其他类型的数据)将指定的字符串拼接到该字符串的末尾。并且字符串本身和拼接的字符串都不能为null,否则运行程序后会报空指针异常NullPointerException(编译时没有报错)。
"+":可以对字符,数字,字符串等数据类型的拼接
append()方法:StringBuffer的方法,可以对字符,数字,字符串等数据类型的拼接,结果返回一个StringBuffer类型的对象
String substring(begin):返回一个新的字符串,它是此字符串的一个子字符串。从指定位置开始到结尾。 如果角标不存在,会出现字符串角标越界异常。
String substring(begin,end):返回一个新字符串,它是此字符串的一个子字符串。
String[] split(String regex):根据匹配给定的正则表达式来拆分此字符串
String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串
String toUpperCase():将字符串全部转成大写
String toLowerCase():将字符串全部转成小写
String trim():删除字符串的头尾空白符
String replace(" ",“”):消除字符串所有空格
int compareTo(str):对两个字符串进行字典顺序的比较。比较基于字符串中各个字符的 Unicode 值。
返回值:
如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。
参考链接:
菜鸟教程 :Java String 类
Java基础12:String、StringBuffer和StringBuilder的区别