String类概述
字符串是由多个字符组成的一串数据(字符序列)的字符串常量,java中所有字符串都是String类的实例.
有两种创建形式:
第一种:
String s1="abc";
先在栈中创建一个对String类的对象引用变量s,然后去字符串常量池中查找有没有"abc", 如果没有则在常量池中添加”abc”, s引用变量指向常量池中的”abc”,如果常量池中有,则直接指向改地址即可,不用重新创建.
class Demo{
public static void mian(String[] args){
String s3="abc";
String s30="abc";
//s3和s30比较的是同一地址,因此返回的是true
System.out.println(s3==s30);
s3+="def";
s3+="123";
//s3每次进行加的操作都是指向了一个新的地址,而前一次的s3会随着时间被系统回收释放。
System.out.println(s3);
}
}
第二种:
一概在堆中创建新对象,值存储在堆内存的对象中。String s = new String("abc");
class Demo{
public static void main(String [] args){
/*
new +构造方法
凡是new 出来的,在内存空间中是独一无二的.
*/
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3==s4);//地址并不相同
System.out.println(s3.equals(s4));//String类中已经把equals方法重写过了
}
}
简化的创建方式
先去字符串常量池中查找,有没有abc,如果没有就在字符串常量中创建一个对象(abc)
如果字符串常量中已经存在abc,那么直接指向已有的对象即可
构造方法
public String()
public String(String str)
public String(byte[] bytes)
public String(char[] value)
判断功能
boolean equals(Object obj) //判断对象中的内容是否相等(若直接调用Object中的方法比较的则是地址)
boolean equalsIgnoreCase(String str) //比较字符内容是否相同,不区分大小写,A-Z与a-z结果相同,都返回true
--------------------------------------------------------------------------------------------------
String s1="abcdefg";
String ss="ABCDEFG";
System.out.println(s1.equalsIgnoreCase(ss));//返回值为true
--------------------------------------------------------------------------------------------------------
boolean contains(String str) //判断字符串中是否有指定的char值序列
----------------------------------------------------------------------------------------------------------------
String s1="abcdefg";
String ss="abc";
System.out.println(s1.contains(ss));//返回值为true
----------------------------------------------------------------------------------------------------------------
boolean isEmpty() //判断字符串是否为空
-------------------------------------------------------------------------------------------------------------------
String s1="abcdefg";
String ss="";
System.out.println(s1.isEmpty());//返回值为false
System.out.println(ss.isEmpty());//返回值为true
-----------------------------------------------------------------------------------------------------------------
boolean startsWith(String prefix) //判断开始的字符串是否为输入的字符串
boolean endsWith(String suffix)//判断结尾的字符串是否为输入的字符串
----------------------------------------------------------------------------------------------------------
String s1="abcdefg";
System.out.println(s1.startsWith("abcd"));//返回值为true
System.out.println(s1.endsWith("fg"));//返回值为true
----------------------------------------------------------------------------------------------------------
int compareTo(String str)//字符串比大小
--------------------------------------------------------------------------------------------------------
public class Demo{
public static void main(String[] args){
String s3 = "abc";
String s4 = "efg";
System.out.println(s3.compareTo(s4));返回值为-4
}
}
------------------------------------------------------------------------------------------------------------
获取功能
int length() //获取字符串的长度(字符串本来就是有字符类型的数组组成的)
char charAt(int index) //获取当前字符串输入位置的字符
String substring(int start,int end)//获取输入位置范围的字符串
------------------------------------------------------------------------------------------------------------------
String s1="abcdefg";
String s2="abcddefgfe";
//找到部分范围内的字符串,再在部分范围内中输出0位置的那个
System.out.println(s1.substring(2,3).charAt(0));//返回值为c
//charAt返回的为字符(char类型),subString不管有几个返回的都是字符串(String类型)compareTo方法需要用String类型比较
System.out.println(s2.substring(0,1).compareTo(s1.substring(0,1)));//返回值为0
//compareTo()方法是用相减的方式,返回值也为两数相减值
--------------------------------------------------------------------------------------------------------------------------
int indexOf(String str) //返回字符串中想要找的字符的位置(数组的位置)
------------------------------------------------------------------------------------------------------------------
String s1="abcdefg";
char c='b';
//从前向后找只出现首次出现的位置
System.out.println(s1.indexOf(c));//返回值为1
-----------------------------------------------------------------------------------------------------------------
int indexOf(String str,int fromIndex) //寻找指定字符串中指定位置之后出现的指定字符的位置,若在指定位置后未出现则返回-1,找到就返回位置
-----------------------------------------------------------------------------------------------------------
String s = "abcdefgd";
int index1 = s.indexOf("d",index+1);//从前向后找 从指定位置开始
System.out.println(index1);//返回值为7
---------------------------------------------------------------------------------------------------------
int lastindexof(String str) //返回从后搜索第一个想要找的字符的位置
--------------------------------------------------------------------------------------------------------
String s1="abcdcefg";
char c='c';
System.out.println(s1.lastindexOf(c));//返回值为4
------------------------------------------------------------------------------------------------------
String substring(int start) //从输入的数开始返回字符串中的字符串
------------------------------------------------------------------------------------------------------
String s1="abcdefg";
System.out.println(s1.substring(2));//返回值为cdefg
-----------------------------------------------------------------------------------------------------
byte[] getBytes()
将String类型字符串转换为byte类型数组
以下是编码再解码的过程
String s = "你好";
//默认是utf-8编码 在utf-8编码中,一个汉字占3个字节 [-28, -67, -96, -27, -91, -67]
byte[] b = s.getBytes("UTF-8");//编码
System.out.println(Arrays.toString(b));
//输出 你好
String s1 = new String(b,"UTF-8");//解码
System.out.println(s1);//输出 你好
char[] toCharArray() //将字符串类型转换为数组
String s = "abcd";
char[] chars = s.toCharArray(); //将字符串转换为一个新的char数组
System.out.println(Arrays.toString(chars));
String s1 = new String(chars); //将char数组 转为字符串
System.out.println(s1);
static String valueOf(char[] chs) //将数组转换为字符串
String s = "abcd";
char[] chars = s.toCharArray(); //将字符串转换为一个新的char数组
String s2 = String.valueOf(chars);
System.out.println(s2);
String toLowerCase() //将大写字母转换为小写字母
tring toUpperCase() //将小写字母转换为大写字母
String s3 = "abcdEFG一";
System.out.println(s3.toUpperCase());//转大写
System.out.println(s3.toLowerCase());//转小写
String concat(String str) //在字符串后加字符串类型内容,返回连接后的字符串
String s3 = "abcdEFG一";
String s4 = s3.concat("11"); // + 可以连接其他类型
System.out.println(s4);//abcdEFG一11
Stirng[] split(分割符)//以输入的内容(可以为正则表达式,字符串)为分隔符,返回类型为字符串类型数组
String s6="abcdedf";
String[] arr=s6.split("d");
System.out.println(Arrays.toString(arr));
替换功能
String replace(char old,char new) //以想要替换的字符串替代指定的字符串(替换的内容是一个字符)
String replace(String old,String new)
String s = "ab2cd6ef3cg";
String sn = s.replace('c', 'C');//将c换成C
System.out.println(s);//ab2cd6ef3cg
System.out.println(sn);//ab2Cd6efCg
replaceAll(String regex, String replacement) //replaceAll("正则表达式 是一种模式匹配",“新的字符串”) 符合正则表达式的全部进行替换
replaceFirst(String regex, String replacement) //代替第一个符合规则regex的字符串并进行替换
String sn1 = s.replaceAll("\\d","D");
System.out.println(sn1);//abDcdDefDcg
String sn2 = s.replaceFirst("\\d", "D");
System.out.println(sn2);//abDcd6ef3cg
去除字符串两空格
String trim()
String s1 = " abc d ";
System.out.println(s1.length());
System.out.println(s1.trim().length()); //只能去除字符串两端的空格,中间的不能去除