一、简介

java.lang.String 字符串就是一个字符序列,由多个字符组成,是Java中最常用的类型

字符串是不变的; 它们的值在创建后无法更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,所以可以共享它们。

二、创建方式

2.1 直接创建

该方式本身来说是不符合引用类型的特点,不符合面向对象的规范

原则上来说,所有引用类型都应该通过new关键来创建对象,只有基本数据类型才能直接赋值

String是一种特殊的引用类型,由于特别常用,所以JVM对其做了优化

String str = "helloWorld";
 String str2="s"; //只包含一个字符的字符串
 String str3="";//空字符串

2.2 通过构造方法创建

String str4 = new String();//创建一个空字符串对象
 String str5 = new String("HelloWorld");

三、常用的方法

返回类型

方法名

作用

char

charAt

获取指定索引位置的字符

int

length

获取字符串的长度

int

indexOf

获取指定子字符串第一次出现的位置,如果找不到则返回­-1

int

lastIndexOf

获取指定子字符串最后出现的位置

boolean

equals

判断值是否相等

boolean

equalsIgnoreCase

忽略大小写,判断值是否相等

boolean

startsWith

判断是否以指定子字符串开头

boolean

endsWith

判断是否以指定子字符串结尾

boolean

contains

判断是否包含指定子字符串

boolean

isEmpty

判断字符串是否为空

String

concat

字符串拼接

String

substring

字符串截取, 范围[beginIndex,endIndex),左闭右开

String

toUpperCase

将字符串中的所有字符转为大写

String

toLowerCase

将字符串中的所有字符转为小写

String

replace

把字符串中的某个字符替换成指定的字符

String

trim

去掉字符串中的首尾空格

String[]

split

将字符串分割为数组

char[]

toCharArray

将字符串转换为字符数组

byte[]

getBytes

将字符串转换为字节数组

四、常用方法演示

4.1 charAt(int index) 获取指定索引的字符

String str = new String("helloWorld");//创建一个字符串对象
 char c = str.charAt(5);//获取索引(下标)为5的字符
 System.out.println("字符串str下标为5的字符是:"+c);//打印索引对应的字符

4.2 length() 获取字符串的长度

String str = new String("helloWorld");
int length = str.length();//获取字符串的长度
System.out.println("字符串str的长度为:"+length);

4.3 indexOf(String str) 获取指定子字符串第一次出现的位置,如果找不到则返回­-1

String str = new String("helloWorld");
 int lo = str.indexOf("lo");//找str中存在的'lo'
 System.out.println("字符串lo在str中第一次出现的位置:" + lo);
 --------------------------------------------------------
 String str = new String("helloWorld");
 int os = str.indexOf("os");//字符串'os'在str中不存在
 System.out.println("字符串os在str中第一次出现的位置:" + os);//结果为-1
 ---------------------------------------------------------
 String str = new String("helloWorld");
 int o = str.indexOf("o",3);//o表示要找的数据,3表示要从索引是3开始找
 System.out.println("从索引为1开始找,字符串o在str中第一次出现的位置:" + o);

4.4 lastIndexOf(String str) 获取指定子字符串最后出现的位置

String str = new String("StudyJava");
int a = str.lastIndexOf("a");
System.out.println("字符串str中字符a最后一次出现的位置:" + a);

lastIndexOf和indexOf十分相似,区别在于indexOf是找字符串第一次出现的位置,lastIndexOf是找字符串最后一次出现的位置,如果指定查找的字符串不存在,都会返回-1

4.5 equals(Object o) 判断值是否相等

String str = new String("StudyJava");
String str2 = "StudyJava";
System.out.println("equals内容比较:"+str.equals(str));//true
System.out.println(" == 地址比较:" +(str == str2));//false

4.6 equalsIgnoreCase(String str) 忽略大小写,判断值是否相等

String str = new String("StudyJava");
String str2 = new String("studyJAva");
boolean bool = str.equalsIgnoreCase(str2);
System.out.println("忽略大小写比较内容:" + bool);//true

4.7 startsWith(String str) 判断是否以指定子字符串开头

String str = new String("StudyJava.java");
boolean stu = str.startsWith("Stu");//判断是否是以Stu开头
boolean stu2 = str.startsWith("stu");//判断是否是以stu开头
System.out.println("stu:" + stu);//true
System.out.println("stu2:" + stu2 );//false

4.8 endsWith(String str) 判断是否以指定子字符串结尾

String str = new String("StudyJava.java");
boolean endsWith = str.endsWith(".java");//判断是否是以 .java 结尾
System.out.println("endsWith:" + endsWith);//true
boolean endsWith2 = str.endsWith(".class");//判断是否是以 .class 结尾
System.out.println("endsWith:" +endsWith2 );//false

4.9 contains(String str) 判断是否包含指定子字符串

String str = new String("StudyJava.java");
boolean bool = str.contains("Java");
System.out.println("字符串str中是否包含Java:" + bool);//true
boolean study = str.contains("study");
System.out.println("字符串str中是否包含study:" + study);//false

4.10 isEmpty() 判断字符串是否为空

String str = new String("");
String str2 = new String("HelloWorld");
System.out.println("str:" + str.isEmpty());//true
System.out.println("str2:" + str2.isEmpty());//false

注意:str.isEmpty()本质上就是判断str.length==0 ,它不等同与str == null

4.11 concat(String str) 拼接字符串

String str = new String("Hello");
 String concat = str.concat("World");
 System.out.println("拼接后的新字符串:" + concat);//HelloWorld

注意:str.concat(“World”) 和 str + “World” 的结果是一样

4.12 substring(int beginIndex,int endIndex) 字符串截取, 范围[beginIndex,endIndex),左闭右开

String str = new String("WelcomeToStudyJava");
String substring = str.substring(9, str.length());//表示从索引为9开始截取,截取到最后
System.out.println("截取后得到的新字符串为:" + substring);

注意:截取的字符串是包含开头不包含结尾的,还有的是截取的结束索引不能大于字符串的长度(endIndex <= str.length())

4.13 toUpperCase() 将字符串中的所有字符转为大写

String str = new String("WelcomeToStudyJava");
String toUpperCase = str.toUpperCase();
System.out.println("把字符串的每个字符都转成大写:" + toUpperCase);//结果:WELCOMETOSTUDYJAVA

4.14 toLowerCase() 将字符串中的所有字符转为小写

String str = new String("WelcomeToStudyJava");
String toLowerCase = str.toLowerCase();
System.out.println("把字符串的每个字符都转成小写:" + toLowerCase);//结果:welcometostudyjava

4.15 replace(char oldChar,char newChar) 把字符串中的某个字符替换成指定的字符

String str = new String("WelcomeToStudyJava");
String replace = str.replace("a", "o");//把字符串中的字符‘a’替换为‘o’
System.out.println("替换后的新字符串:" + replace);//结果WelcomeToStudyJovo

4.16 trim() 去掉字符串中的首尾空格

String str = new String(" Welcome To Study Java ");
String trim = str.trim();
System.out.println("去掉首尾空格后的新字符串:" + trim);

注意:trim()方法只是去掉字符串的首尾的空格,如果字符串的内容中间有空格,调用此方法是不能去掉的

4.17 split(String regex) 将字符串分割为字符串数组

String str = new String("我-想-做-个-好-人");
 String[] split = str.split("-");//以横杠‘-’分割
 System.out.println("横杠-分割后为:" + Arrays.toString(split));
 String str2 = new String("不好意思我是个警察");
 String[] split2 = str2.split("");
 System.out.println("使用默认分割后为:" + Arrays.toString(split2));

注意:使用split方法时,写分割规则时要检查字符串中是否能匹配得到,不要是没有效果的(默认规则 “” 除外)

4.18 toCharArray() 将字符串转换为字符数组

String str = new String("再给我次机会我也想做个好人");
 char[] chars = str.toCharArray();
 System.out.println("字符串转换为字符数组:" + Arrays.toString(chars));

4.19 getBytes() 将字符串转换为字节数组

String str = new String("abcdefghijklmnopqrstuvwxyz");
byte[] bytes = str.getBytes();
System.out.println(Arrays.toString(bytes));

结语:

String类还有很多的方法,以上列出的只是比较常用的。需要了解更多有关String类方法的小伙伴可以去JDKAPI中看看,肯定会有所收获。