3.String
3.1.概述
- 在Java语言中,所有类似“ABC”这样用双引号引起来的字符串,都是String类的对象
- String类位于java.lang包下,是Java语言的核心类
- String类提供了字符串表示、比较、查找、截取、大小写转换等各种针对字符串的操作
//创建空字符串对象,需要注意的是null != ""
public String()
//把字节数组中的元素转换成字符串,字节数组中可以是字符,也可以是ASCII码值
public String(byte[] bytes)
//同上,只不过指定了区间
public String(byte[] bytes,int offset,int length)
//同字节数组
public String(char[] value)
//同上
public String(char[] value,int offset,int count)
//套娃
public String(String original)
3.2.转换总结
- 数组 –> String
Arrays.toString(数组名)
new String(char[])
构造方法String.valueOf(char[])
- String –> 数组
toCharArray()
- 任意类型—>String
""+任意类型
,即空串+数据,利用字符串的+连接特性:任意类型和字符串用+连接,都会变成字符串public String.valueOf(数据)
,可以把任意类型转为Stringxxx.toString()
,toString方法String s = new String ()
,构造方法
- String —> Integer
Integer.parseInt(String s)
:下边介绍
3.3.字符串常量池
- 字符串是常量,它的值在创建之后不能更改,也就是说String对象不可变
- 原因是String中的字符串都是由字符数组装着的,而该数组是final修饰的
- 每一个字符串字面值都作为一个对象存储在堆上的字符串常量池中
- 当后续再使用字面值创建相同内容的字符串对象时,直接将该对象返回给引用
- 如果使用new关键字创建相同内容字符串对象,对象不共享,但是字符数组仍然共享
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3 == s4); //false
System.out.println(s3.equals(s4)); //true
String s5 = "hello";
String s6 = "hello";
System.out.println(s5 == s6); //true
System.out.println(s5.equals(s6)); //true
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3==(s1+s2)); //false
System.out.println(s3.equals(s1+s2)); //true
System.out.println(s3==("hello"+"world")); //true
System.out.println(s3.equals("hello"+"world")); //true
使用加号对字符串进行拼接操作,会有下述两种结果
- 直接在常量池中创建新的拼接对象
- 在堆上创建新的拼接对象
经过测试我们发现
- 当参与字符串拼接的两个字符串中,至少有一个是以引用变量的形式出现时必然会在堆上创建新的字符串对象
- 只有参与字符串拼接运算的两个字符串,都是字符串字面值常量的时候,此时不会在堆上创建新的字符串对象,而是在常量池中直接拼接创建对象
- 如果已存在,则不创建新的对象
3.4.常用方法
3.4.1.判断方法
//用来比较字符串的内容,注意区分大小写
public boolean equals(Object obj)
//忽略字符串大小写比较字符串内容,常见用于比较网址
public URLboolean equalsIgnoreCase(String str)
//判断当前字符串对象是否包含,目标字符串的字符序列,常见用于确定是否有盗链行为
public boolean contains(String str)
//判断当前字符串对象,是否已目标字符串的字符序列开头
public boolean startsWith(String str)
//判断当前字符串,是否以目标字符串对象的字符序列结尾,常用于确定文件后缀名格式
public boolean endsWith(String str)
//判断一个字符串,是不是空字符串
public boolean isEmpty()
3.4.2.获取方法
// 获取当前字符串对象中,包含的字符个数
public int length()
//获取字符串对象代表字符序列中,指定位置的字符
public char charAt(int index)
//在当前字符串对象中查找指定的字符,如果找到就返回字符,首次出现的位置,如果没找到返回-1
//也可以填字符
public int indexOf(int ch)
//指定从当前字符串对象的指定位置开始,查找首次出现的指定字符的位置,(如果没找到返回-1)
//可以填入字符
public int indexOf(int ch,int fromIndex)
//查找当前字符串中,目标字符串首次出现的位置(如果包含),找不到,返回-1
//这里的位置是指目标字符串的第一个字符,在当前字符串对象中的位置
public int indexOf(String str)
//指定,从当前字符串对象的指定位置开始,查找首次出现的指定字符串的位置(如果没找到返回-1)
//这里的位置是指目标字符串的第一个字符,在当前字符串对象中的位置
public int indexOf(String str,int fromIndex) ,
//返回字符串,该字符串只包含当前字符串中,从指定位置开始(包含指定位置字符)到结束的那部分字符串
public String substring(int start)
//返回字符串,只包含当前字符串中,从start位置开始(包含),到end(不包含)指定的位置的字符串
public String substring(int start,int end)
3.4.3.转换方法
//获取一个用来表示字符串对象字符序列的,字节数组
public byte[] getBytes()
//获取的是用来表示字符串对象字符序列的,字符数组
public char[] toCharArray()
//把字符数组转换成字符串
public static String valueOf(char[] chs)
//把各种基本数据类型转换成字符串
public static String valueOf(int i/double...)
//把字符串全部转化为小写
public String toLowerCase()
//把字符串全部转换为大写
public String toUpperCase()
//字符串拼接,作用等价于 + 实现的字符串拼接
public String concat(String str)
3.4.4.其他方法
- 替换方法
// 在新的字符串中,用新(new)字符,替换旧(old)字符
public String replace(char old,char new)
//在新的字符串中,用新的字符串(new), 替换旧(old)字符串
public String replace(String old,String new)
//使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
public String replaceAll(String regex,String replacement)
eg: str.replaceAll("[^a-zA-Z0-9]","") //删掉所有非a~z,A~Z,0~9的字符
需要注意的是,替换不是在原对象上替换,而是创建了新的对象
- 去除空格字符
//在新的字符串中,去掉开头和结尾的空格字符
public String trim()
- 拆分方法
//根据给定正则表达式的匹配拆分此字符串。
public String[] split(String regex)
- 比较方法
//字符串前面部分的每个字符完全一样,返回:后面两个字符串长度差;调用者的长度减去str的长度
//字符串前面部分的每个字符存在不一样,返回:出现不一样的字符 ASCII 码的差值。同理,调用者与str的第一个不相同的字母的ASCII码值减去被调用者对应的ASCII码值
//字符串的每个字符完全一样,返回 0;
public int compareTo(String str)
//与compareTo的不同处在于,忽略大小写
public int compareToIgnoreCase(String str)
3.4.5.转义字符
\t
制表符\n
换行\r
回车\\
反斜杠\"
双引号\'
单引号
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/181087.html