String类位于 java.lang包中,被final修饰,没有子类
String 是用来放置字符串的,我们通常会这样定义:
String s="Hello";
这样定义的字符串位于方法区的字符串常量池中,方便下次使用
一、获取字符串的两种方式:【面试】
(1) String str1="hello";
直接通过""获取字符串的形式,在串池中查看是否存在该字符串对象,如果串池中有,则直接使用; 如果串池中没有,则需要在串池中创建对应的字符串对象,串池中字符串用于共享
(2) String str2=new String("world");
通过创建对象形式获取字符串对象,首先在堆空间中完成一个字符串对象的创建,然后再区串池中查看是否存在该 字符串对象,存在-无需创建,不存在-需要在串池完成字符串创建,此获取字符串对象的方式产生1~2个字符串对象
二、String类中常见方法:
引入:被""引起来一个或是多个字符被称为字符串 字符串底层本质为 char类型数组,字符串的长度等价于底层数组的长度,获取方式:str.length();(方法); 字符串的下标等价于数组,从0开始,最大下标为:长度-1
(1) int length():
获取字符串的长度 【面试常用】
注意:数组获取长度,利用 数组名.length 字符串获取长度,利用 str.length();
(2) char charAt(int index):
根据下标获取对应的字符 【面试常用】
注意:如果指定的下标超过字符串的下标范围,则运行报错,错误信息为: java.lang.StringIndexOutOfBoundsException(字符串下标越界)
String str = "hello"; char c = str.charAt(2);
应用:遍历字符串(获取字符串中每个字符)
String str = "hello";
for(int i=0;i<str.length();i++){
char c = str.charAt(i);
// 通过 c 操作每个字符
}
(3) boolean equals(String str):
比较两个字符串内容是否相等,相等-true,不相等-false
boolean equalsIgnoreCase(String str):
比较字符串内容是否相等,忽略大小写 注意:验证码通常忽略大小写
(4) boolean contains(String str):
判断str在当前字符串中是否包含,包含-true;不包含-false
(5) String toUpperCase():
将字符串中小写字母转换为大写字母 【了解】
String toLowerCase():将字符串中大写转换为小写字母
(6) boolean endsWith(String str):
判断当前字符串是否以str结尾,是-true;不是-false 【了解】
boolean startsWith(String str):判断当前字符串是否以str开头,是-true,不是-false
(7) int indexOf(String s):
如果s在当前字符串中存在,则返回s字符串在当前字符串第一个字符出现下标,如果s在当前字符串 中不存在,则返回-1 【了解-面试编程中涉及】
(8) String trim():将字符串中前后空格去除 【了解】 String str = " hel lo "; System.out.println(str.trim()); // hel lo
实际应用场景:
String strAge = "18 ";
// String-> int
int age = Integer.parseInt(strAge.trim());
System.out.println(age);
(9) String[] split(String s):
将当前字符串以s进行拆分,拆分之后的结果存储在 String数组中【了解-面试涉及】
String str4 = "hello-java-aa";
String[] ss= str4.split("-");
for(int i=0;i<ss.length;i++){
System.out.println(ss[i]);
}
三、String的不可变性 【理解-面试】
(1) String字符串为字面值常量,一旦创建不能更改,如果完成String字符串的拼接,先拷贝一个副文本,在副文本的基础上完成字符串拼接
(2) String字符串拼接效率比较低
四、可变长的字符串 【需要大量字符串拼接时应用】
(1) 常用可变长字符串位于java.lang包中:
a. StringBuffer:jdk1.0版本,线程安全,并发效率低
b. StringBuilder: jdk5.0版本,线程不安全,并发效率高
(2) 常见的构造方法:
StringBuilder sb = new StringBuilder();// 无参数
StringBuilder sb = new StringBuilder(“hello”);// 有参数
(3) 常见的方法:
sb.append("字符串"); 拼接字符串
(4) 应用:StringBuffer/StringBuilder为可变长的字符串,所以拼接字符串时效率相对高,如果出现大量字符串拼接,优先考虑 StringBuffer/StringBuilder,而不采用String拼接