java.long.String类代表字符串。
字符串特点:
1.字符串的内容永不改变,是个常量(最重要)如果想变,就是传给了一个新的数组
2.正是因为字符串不可改变,所以字符串是可以共享使用的。
3.字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。
创建字符串的常见3+1种方式。
三种构造方法:
public String();创建一个空白字符串,不含有任何内容。
String str=new String();//创建一个空的字符串
public String(char[] array);根据字符数组的内容,来创建对应的字符串。
char[] charArray={'A','B','C'}; String str=new String(charArray);
public String(byte[] array);根据字节数组的内容,来创建对应的字符串。
byte[] byteArray={97,98,99}; String str=new String(byteArray);//等于abc
一种直接构造:
String str ="Hello";//这里没有new,也照样是字符串的对象。
字符串常量池,程序当中直接写上的双引号字符串,就在字符串常量池中
对于基本类型来说,==是进行数值的比较。
对于引用类型来说,==是进行【地址值】得比较
String str1="abc" String str2="abc"; char[] charArray={'a','b','c'}; String str3=new String(charArray); System.out.println(str1==str2);//true System.out.println(str1==str2);//false System.out.println(str2==str3);//false
注意:
1.这里是引用类型的比较,所以是比较地址
2.双引号直接写的字符串在常量池当中,new的不在池当中,但都在堆当中。
方法的调用都是在有类的变量后边加 . 再加该类有的方法名称
==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法:
1.public boolean equals(Object obj);
参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true,否则返回false。
备注:
(1).任何对象都能哟Object接收。
(2).equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样
(3).如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
推荐:"abc".equals(str);
不推荐:str.equals("abc");
因为有一种特殊:
String str =null; str.equals("abc");
这种情况要报错,因为在调用方法的.之前是一个null,这个叫做空指针异常
String str1="abc" String str2="abc"; char[] charArray={'a','b','c'}; String str3=new String(charArray); String str4="Abc"; String str5=null; System.out.println(str1.equals(str2));//str1和str2内容比较(true) System.out.println(str2.equals(str3));//(true) System.out.println(str3.equals("abc"));//true System.out.println("abc".equals(str1));//true System.out.println("abc".equals(str4));//false System.out.println(str5.equals("abc"));//报错
2. public boolean equalsIgnoreCase(String str);
忽略大小写进行内容比较。
String str1="Abc" String str2="abc"; System.out.println(str1.equals(str2));//false System.out.println(str1.equalsIgnoreCase(str2));//true
常见的方法有:
1.public int length();
获取字符串当中含有的字符个数,拿到字符串长度。
2.public String concat(String str);
将当前字符串和参数字符串拼接成为返回值新的字符串
3.public char charAt(int index);
获取指定索引位置的单个字符。(索引都是从0开始)
4.public int indexoOf(String str);
查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。
1.public String substring(int index);
截取从参数位置一直到字符串末尾,返回新字符串。
2.public String substring(int begin,int end);
上一种的重载形式,截取从begin开始,一直到end结束,属于中间的字符串。**备注:[begin,end),包含左边,不包含右边。**如:begin=5,end=7,那么就要得到索引为5到6的字符串,长度为7-5等于2;
1.public char[] toCharArray();
将当前字符串拆分成为字符数组作为返回值。
char[] chars="abc".toCharArray();//这样可以单个单个处理数组元素 int len=chars.length//访问字符数组length就不加括号
2.public byte[] getBytes();
获取当前字符串底层的字节数组。
byte[] bytes="abc".getBytes(); for (int i = 0; i < bytes.length; i++) { System.out.println(bytes[i]); }//输出97 98 99
3.public String replace(CharSequence oldString,CharSequence newString);
将所有出现的老字符替换成为新的字符串,返回替换之后的结果新字符串。
备注:CharSequence意思就是说可以接受字符串类型。
String str1="aaaabbbbcccc"; String str2=str1.replace("a","x"); System.out.println(str2);//最后输出xxxxbbbbcccc
生活常用(网络社交敏感词过滤):
String str1="你个帅比"; String str2=str1.replace("帅比","**"); System.out.println(str2);//输出“你个**”
public String[] split(String regex);
按照参数规制,将字符串切分成若干个部分。
**注意:**split方法的参数其实是一个“正则表达式”。
如果按照英文据点“.”切分,必须写“\\.”(前面加两个反斜杠),因为这个点再正则表达式中有特殊的含义。
String str1="aaa,bbb,ccc"; String[] array1=str1.split(","); for (int i = 0; i < array1.length; i++) { System.out.println(array1[i]); }//输出aaa bbb ccc