一、简介
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中看看,肯定会有所收获。