JAVA-String类

文章目录

  • 1.认识Sting类
  • 2.String类中常用的方法
    • 2.1字符串构造
    • 2.2比较Sting对象内容是否相等
    • 2.3字符串查找
      • 2.3.1 char charAt(int index)
      • 2.3.2 int indexOf()
      • 2.3.3 int lastIndexOf()
    • 2.4字符串转化
      • 2.4.1数值和字符串转化
      • 2.4.2大小写转换
      • 2.4.3字符串转数组
    • 2.5字符串连接
    • 2.6字符串替换
    • 2.7字符串拆分
    • 2.8字符串截取
    • 2.9 去掉字符串中的左右空格,保留中间空格
    • 2.10判断字符串内容是否为空
  • 3.字符串的不可变性
    • 4.字符串的修改
    • 5.StringBuilder和StringBuffer
      • 5.1StringBuilder
      • 5.2StringBuffer

1.认识Sting类

String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。java把String类声明的final类,不能有子类。String类对象创建后不能修改,由0或多个字符组成。
String是引用类型,内部并不存储字符串本身,而是存了一个数组和哈希值
这个数组被final修饰所以,所以不能改变引用指向的对象,而且这个数组也被private修饰
所以不能通过下标来访问修改数组中的内容

2.String类中常用的方法

2.1字符串构造

String(array)

char[] array = {'h','e','l','l','o'};
String s = new String(array);
System.out.println(s);

输出:hellow

2.2比较Sting对象内容是否相等

boolean equals(Object anObject)

2.3字符串查找

2.3.1 char charAt(int index)

返回index位置上字符,如果index为负数或者越界,抛出IndexOutOfBoundsException异常

2.3.2 int indexOf()

int indexOf(int ch)   //返回ch第一次出现的位置,没有返回-1

int indexOf(int ch, int fromIndex)  //从fromIndex位置开始找ch第一次出现的位置,没有返回-1

int indexOf(String str)  //返回str第一次出现的位置,没有返回-1

int indexOf(String str, int fromIndex)  //从fromIndex位置开始找str第一次出现的位置,没有返回-1

2.3.3 int lastIndexOf()

int lastIndexOf(int ch)  //从后往前找,返回ch第一次出现的位置,没有返回-1

int lastIndexOf(int ch, int fromIndex)

int lastIndexOf(String str)  //从后往前找,返回str第一次出现的位置,没有返回-1

int lastIndexOf(String str, int fromIndex)  //从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1

上述方法都是实例方法(对象方法)

2.4字符串转化

2.4.1数值和字符串转化

//字符串转数字
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");
//数字转字符串
int date3 = String.valueOf(123);

2.4.2大小写转换

public String toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串
public String toUpperCase()//返回将当前字符串中所有字符转换成大写后的新串

2.4.3字符串转数组

public String toCharArray()// 字符串转数组

2.5字符串连接

public String concat(String str) // 将参数中的字符串str连接到当前字符串的后面,效果等价于"+"。

2.6字符串替换

String replace(CharSequence target, CharSequence replacement);  //将所有的target替换为replacement 
String replaceAll(String regex, String replacement);  //替换所有的指定内容
String replaceFirst(String regex, String replacement);  //替换首个内容

注:替换不是修改当前字符串,而是产生一个新的字符串

2.7字符串拆分

String[] split(String regex); //将字符串全部拆分
String[] split(String regex, int limit); //将字符串以指定的格式,拆分为limit组

注意事项:

  1. 字符"|“,”*“,”+"都得加上转义字符,前面加上 “\” .
  2. 而如果是 “” ,那么就得写成 “\\” .
  3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.

2.8字符串截取

String substring(int beginIndex); //从指定索引截取到结尾
String substring(int beginIndex, int endIndex); //截取部分内容

注:前闭后开区间的写法, substring(0, 4) 表示包含 0 号下标的字符, 不包含 4 号下标

2.9 去掉字符串中的左右空格,保留中间空格

String trim();

2.10判断字符串内容是否为空

String isEmpty(); 

3.字符串的不可变性

String类中的字符实际保存在内部维护的value字符数组中

  1. String类被final修饰,表明该类不能被继承
  2. value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。

所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象

4.字符串的修改

注意:尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

5.StringBuilder和StringBuffer

5.1StringBuilder

以下是StringBuilder类中存储的方法

StringBuff append(String str)//在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、double、float、int、long、Object、String、StringBuff的变量

char charAt(int index) //获取index位置的字符

int length() //获取字符串的长度

int capacity() //获取底层保存字符串空间总的大小

void ensureCapacity(int mininmumCapacity) //扩容

void setCharAt(int index,char ch) //将index位置的字符设置为ch

StringBuff insert(int offset, String str) //在offset位置插入:八种基类类型 & String类型 & Object类型数据

StringBuffer deleteCharAt(int index) //删除index位置字符

StringBuffer delete(int start, int end) //删除[start, end)区间内的字符

StringBuffer replace(int start, int end, String str) //将[start, end)位置的字符替换为str

String substring(int start) //从start开始一直到末尾的字符以String的方式返回

String substring(int start,int end)[start, end)//范围内的字符以String的方式返回

StringBuffer reverse() //反转字符串

String toString() //将所有字符按照String的方式返回

int indexOf(String str) //返回str第一次出现的位置

int indexOf(String str, int fromIndex) //从fromIndex位置开始查找str第一次出现的位置

int lastIndexOf(String str) //返回最后一次出现str的位置

int lastIndexOf(String str, int fromIndex) //从fromIndex位置开始找str最后一次出现的位置

String的内容无法修改,而StringBuilder的内容可以修改。频繁修改字符串的情况考虑使用StringBuilder。

注意:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:

  • String变为StringBuilder: 利用StringBuilder的构造方法或append()方法

  • StringBuilder变为String: 调用toString()方法

 public static void main(String[] args) {
 
        //StringBuilder转换为String
        StringBuilder sb1 = new StringBuilder();
        sb1.append("hello");
        //String s = sb; //这个是错误的做法
        
        //public String toString ():通过toString() 就可以实现把StringBuilder 转换为String
        String s = sb1.toString();
        System.out.println(s);
 
        //String转换为StringBuilder
        String ss = "hello";
        //StringBuilder sb = s; //这个是错误的做法
        
        //public StringBuilder(String s): 通过构造方法就可以实现把String 转换为StringBuilder
        StringBuilder sb2 = new StringBuilder(s);
        System.out.println(sb2);
    }

5.2StringBuffer

用于多线程

你可能感兴趣的:(java)