String是一个final类,故是一个引用类
字符串是一个常量,创建后就不可更改,赋值后可以重新赋值。
String str = "Hello world!";
字符串可看成是一个字符数组组成的串:
char[] c = {'H','e','l','l','o',' ','w','o','r','l','d','!'};
String string = new String(c);
String
类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。
那在这里简单说几种常用方法
1. charAt(int index)
返回指定索引处的 char 值。
int index = 6;
char ch = str.charAt(index); //返回的是字符串中该索引位置的字符
ps:索引不可超过字符串的长度,否则会报StringIndexOutOfBoundsException
异常。
2. compareTo(String anotherString)
按字典顺序区分大小地比较两个字符串。
String string = "hello world!";
//如果参数字符串等于此字符串,则返回值0
int num = str.compareTo(str); //num = 0
//如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值
int num1 = str.compareTo(string); //H跟h不同,比较,由ASCII码72(str的H)-104(string的h),num1 = -32
//如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值
int num2 = string.compareTo(str); //H跟h不同,比较,由ASCII码104(string的h)-72(str的H),num2 = 32
3. compareToIgnoreCase(String anotherString)
按字典顺序不区分大小地比较两个字符串。
String string = "hello world!";
//如果参数字符串不区分大小写等于此字符串,则返回值0
int num = str.compareTo(string); //num = 0
4. startsWith(String prefix)
判断字符串是否由字符串prefix开头。
boolean b = str.startsWith("he"); //str以"He"开头,b = false
boolean b1 = string.startsWith("he"); //string以"he"开头,b1 = true
5. endsWith(String suffix)
判断字符串是否由字符串suffix结尾。
boolean o = str.endsWith("!"); //str以英语符号"!"结尾,o = true
boolean o1 = string.endsWith("!"); //string以英语符号"!"结尾并不是中文符号"!",b1 = false
6. indexOf(int ch) 和 indexOf(int ch, int fromIndex)
indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。若字符串中没有该字符,则返回-1. 该方法的参数还可以是字符串。
indexOf(int ch, int fromIndex) 从fromIndex索引位置开始搜索,返回指定字符在此字符串中第一次出现处的索引。若字符串中没有该字符,则返回-1. 该方法的第一个参数还可以是字符串。
int i = str.indexOf('a'); //str中没有字符a,返回-1
int i1 = str.indexOf('o'); //str中o字符第一次出现的位置是4(从0开始),返回值为4
int i2 = str.indexOf('o',5); //从索引5开始,字符o第一次出现的位置是整个字符串的第7位,返回值为7
7. lastIndexOf(int ch) 和 lastIndexOf(int ch, int fromIndex)
与indexOf类似,lastIndexOf(int ch)返回指定字符在此字符串中最后一次出现的索引,而lastIndexOf(int ch, int fromIndex)则是从指定索引开始反向搜索(从后往前),返回指定字符在字符串0-fromIndex位置中最后一次出现的索引值。
i = str.lastIndexOf('l'); //字符l最后一次出现的位置是在world中,索引是9
i2 = str.lastIndexOf('l',5); //字符l在0-5索引中最后一次出现是在hello的第二个l,索引是3
8. contains(CharSequence s)
当该字符串中包含指定的char值序列时,返回true,否则返回false。当s为null时,抛出NullPointerException
异常。
boolean con = str.contains("hello"); //此时con为false
con = string.contains("hello"); //此时con为true
9. toLowerCase() 和 toUpperCase()
toLowerCase() 把所有字符转换成小写,原本字符是大写的不变;
toUpperCase() 把所有字符转换成大写,原本字符是小写的不变。
System.out.println(string.toUpperCase()); //输出HELLO WORLD!
System.out.println(string); //输出hello world!,因为没有将string.toUpperCase()赋值给string,string还是保持不变
System.out.println(string.toLowerCase()); //输出hello world!
10. trim()
返回去除字符串首尾的空白之后的此字符串,字符串首尾没有空白,返回该字符串。
String temp = " 留白 ";
System.out.println(temp); //输出“ 留白 ”
temp = temp.trim(); //trim()处理后重新赋值
system.out.println(temp); //输出“留白”
11. substring(int beginIndex) 和 substring(int beginIndex, int endIndex)
返回此字符串的一个子字符串。
substring(int beginIndex) 截取的是从binginIndex索引开始到结尾的字符串;
substring(int beginIndex, int endIndex) 截取的是从beginIndex索引开始到endIndex索引的字符串。
System.out.println(str.substring(2)); //输出"llo world!"
System.out.println(str.substring(5, 10)); //输出" worl"
12. toCharArray()
将此字符串转换为一个新的字符数组,也就对应了在前面说的,可以将一个字符串看成是一个字符数组。
char[] char1 = str.toCharArray(); //将字符串转换为新的字符数组
System.out.println(char1[0]); //数组中0索引的字符是H
13. valueOf(Object obj)
valueOf() 是将传递的参数转换成String类型的表现形式,该方法是静态的,可以直接用类名调用。
可以看出,valueOf() 传递的参数类型是Object,那么就是说,可以该参数类型可以为绝大部分数据类型,但官方API中没有写出参数类型为byte的方法。
String number = String.valueOf(123456789); //将int参数类型转换成String表示形式
System.out.println(number);
String bString = String.valueOf(string.contains("hello")); //将boolean参数类型转换成String表示形式
System.out.println(bString);
Object object = null;
System.out.println(String.valueOf(object)); //若objcet为null,valueOf会返回字符串"null",注意与下面toString()对比
14. toString()
返回用字符串类型表示的调用者对象本身。一般当你新建一个类的时候都会重写toString() 方法,用来简单易懂地描述该类的信息,若不重写,返回的则是该类对象的内存地址。
System.out.println(char1.toString()); //返回char1对象的内存地址,[C@......
System.out.println(object.toString()); //object为空,抛出NullPointerException异常,对比起来,valueOf对空对象的处理好像更安全