- String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
- 字符串是常量,它们的值在
创建之后不能更改
。- 字符串缓冲区支持可变的字符串。因为
String 对象是不可变的,所以可以共享
。字符串效果上相当于char[]数组
,但是底层原理是byte[]数组
。
直接使用双引号创建:
直接写上双引号,就是创建了String对象
String str = "abc";
System.out.println("直接使用双引号创建的字符串为:"+str);//结果为:abc
四种构造方法创建:
1.
public String():创建一个空白字符串
//初始化一个新创建的 String 对象,使其表示一个空字符序列。
String str = new String();
System.out.println("使用public String()创建的字符串为:"+str);
2.
public String(String str)
:使用有参方法创建字符串
//初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
String str = new String("abc");
System.out.println("使用public String(String str)创建的字符串为:"+str);//结果为:abc
3.
public String(char[] array)
:根据字符数组的内容创建
对应的字符串
//分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
char[] charArray = {'a','b','c'};
String str = new String(charArray);
System.out.println("使用public String(char[] array)创建的字符串为:"+str);//结果为:abc
4.
public String(byte[] array)
:根据字节数组的内容创建
对应的字符串
//通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
byte[] byteArray = {97,98,99};
String str = new String(byteArray);
System.out.println("使用public String(byte[] array)创建的字符串为:"+str);//结果为:abc
在ASCII码表中,65代表字母A,97代表字母a
了解更多关于ASCII码表的知识可以点击这里
字符串常量池(在堆内存中):
对于基本数据类型 == 是对数值的比较
对于引用数据类型 == 是对地址值的比较
(1)equals方法,比较字符串内容
方法信息:
public boolean equals(Object obj)
参数可以是任何对象,只有参数是一个字符串并且内容相同
才会返回true
//定义三个字符串
String str1 = "Hello";
String str2 = new String("Hello");
String str3 = "hello";
//比较定义方式不同,但是内容相同的字符串
System.out.println(str1.equals(str2));//结果为:true
//比较定义方式相同,但是内容不同的字符串
System.out.println(str1.equals(str3));//结果为:false
//使用 "" 定义字符串,直接.equals方法
System.out.println("Hello".equals(str1));//结果为:true
如果使用equals()比较一个常量一个变量,通常常量在前,变量在后
String str4 = null;
//System.out.println(str4.equals(""));
//不推荐,如果变量为空,会报java.lang.NullPointerException错误
System.out.println("".equals(str4));//结果为:false
(2)equalsIgnoreCase方法,忽略英文大小写
进行内容比较
方法信息:
public boolean equalsIgnoreCase()
String str5 = "Java";
String str6 = "java";
System.out.println(str5.equals(str6));//结果为:false
System.out.println(str5.equalsIgnoreCase(str6));//结果为:true
(1)length方法,获取字符串长度
方法信息:
public int length()
int l = "qwertyuiopasdfghjkl".length();
System.out.println("字符串长度为:"+l);
//结果为:字符串长度为:19
(2)concat方法,将参数字符串与原字符串进行拼接
方法信息:
public String concat(String str)
String str1 = "Hello";
String str2 = "World";
System.out.println(str1.concat(str2));
//结果为:HelloWorld
(3)charAt方法,获取指定索引位置的单个字符
方法信息:
public char charAt(int index)
char ch = "Hello".charAt(1);
System.out.println("1号索引位置的元素为:"+ch);
//结果为:1号索引位置的元素为:e
(4)indexOf方法,查找参数字符串在本字符串当中首次出现的索引位置
,如果没有返回-1
方法信息:
public int indexOf(String str)
String str3 = "HelloWorld";
String str4 = "ll";
String str5 = "abc";
System.out.println(str4+"第一次在"+str3+"中出现的索引位置为:"+str3.indexOf(str4));
//结果为:ll第一次在HelloWorld中出现的索引位置为:2
System.out.println(str5+"第一次在"+str3+"中出现的索引位置为:"+str3.indexOf(str5));
//结果为:abc第一次在HelloWorld中出现的索引位置为:-1
(1)substring方法(一个参数),截取从参数索引开始一直到字符串的最后
第几个元素与索引n
的关系为 n+1
方法信息:
public String substring(int index)
String str1 = "HelloWorld";
String str2 = str1.substring(5);
System.out.println(str2);//结果为:World
(2)substring方法(两个参数),截取[begin,end)
索引位置的字符串
方法信息:
public String substring(int begin ,int end)
String str1 = "HelloWorld";
String str3 = str1.substring(2,5);
System.out.println(str3);//结果为:llo
(1)toCharArray方法,将字符串拆分为字符数组
方法信息:
public char[] toCharArray()
//将字符串拆分为字符数组
String str1 = "HelloWorld";
char[] chArr = str1.toCharArray();
(2)getBytes方法,将当前串转换为底层的字符数组
方法信息:
public byte[] getBytes()
//将字符串拆分为字节数组
String str1 = "HelloWorld";
byte[] byArr = str1.getBytes();
(3)replace方法,将字符串的某一字符全部替换为新字符
方法信息:
public String replace(CharSequence oldString ,CharSequence newString)
第一参数为旧字符,第二个参数为新字符
//将 "l" 替换为 "*"
String str1 = "HelloWorld";
String str2 = str1.replace("l", "*");
System.out.println(str1);//HelloWorld
System.out.println(str2);//He**oWor*d
split方法,按照参数的规则,分割字符串
方法信息:
public String[] split(String regex)
参数regex
实际为正则表达式
了解正则表达式点这里
String str1 = "aaa,bbb,ccc";
String[] stringArray = str1.split(",");//参数为正则表达式
for (int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[i]);
}
//结果为:
//aaa
//bbb
//ccc