【Java】三大特殊类之------String类

本文详细介绍了Java中的String类,包括它的特殊性、实例化方式(直接赋值与构造方法)、字符串的相等比较、匿名对象、两种实例化的区别以及String类的常用操作,如转换、比较、查找、替换、拆分、截取等。此外,还提到了与StringBuffer的区别和使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三大特殊类

  • String类
  • Object类
  • 包装类
    String类:
    final class String
    被final修饰的类不能被继承(为保证所有用户用到的String类都一样,只能使用,不能修改)

1.实例化方式

  • 直接赋值
String str = "hello world";
  • 通过构造方法赋值
String str = new String("hello world");

例子:

public class Test{
    public static void main(String[] args) {
        //直接赋值
        Test test = new Test();
        String str = "hello world";
        //通过构造方法赋值
        String str1 = new String("hello world");
        System.out.println(str);
        System.out.println(str1);
    }
}

2.字符串的相等比较

“==”操作符用于比较两个变量的值是否相等,对于基本类型而言,比较的就是数值的大小;
对于引用类型而言,比较的实际上是保存的地址是否相等而不会比较内容。

所以在字符串内容比较时,需要使用String类提供的equals()方法。(equals对象,区分大小写)

str1.equals(str2);
equalsIngoreCase() //不区分大小写比较

举例:

public class Test{
    public static void main(String[] args) {
        //直接赋值
        Test test = new Test();
        String str = "hello world";
        //通过构造方法产生对象
        String str1 = new String("hello world");
        System.out.println(str);
        System.out.println(str1);
        System.out.println(str.equals(str1));//比较的是内容,不是地址
        System.out.println(str.equalsIgnoreCase(str1));
    }
}

运行结果:
在这里插入图片描述

3.String类的匿名对象

——没有任何栈内存指向的对象(没有名字的对象),所有字符串常量(“ ”)都是String类的匿名对象。
在比较字符串是否等于特定字符串时,将字符串常量写在equals前,通过字符串常量来比较。

"hello world".equals(str);

举例:

public class Test{
    public static void main(String[] args) {
        String str = new String("hello world");
        System.out.println(str.equals("hello world"));
        System.out.println("hello world".equals(str));
    }
}

运行结果:
在这里插入图片描述

4.两种实例化区别?

直接赋值与构造方法赋值

  • 直接赋值:(推荐使用)
    ——在JVM内部会维护一个字符串常量池(对象数组)
    若采用直接赋值的方法进行String类的实例化操作,那么该对象会自动保存到对象池之中。
    若下一次继续使用直接赋值的方式实例化String类对象,先在对象池中寻找是否有指定内容对象,若有,直接引用.否则创建新空间,将新对象入池以供下次使用.

举例:

public class Test{
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        String str3 = "hello";
        System.out.println(str1 == str2);
        System.out.println(str2 == str3);
        System.out.println(str1 == str3);
    }
}

在这里插入图片描述

  • 构造方法赋值:
    当使用构造方法实例化字符串时,实际上会开辟两次空间,实例化后的对象并不会保存到对象池中,可以使用intern( )方法来手工入池。
    举例:
public class Test{
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = new String("hello").intern();
        System.out.println(str1 == str2);
    }
}

5.字符串常量不可变更:

——堆中常量的值无法修改,但是栈中的指向可以更改
(字符串不要改变太多次,慎用拼接操作"+")
可以用SB
在这里插入图片描述

String类操作方法:

一.转换
1.char < ---->String(字符和字符串之间的相互转换)
char[ ] —>String

1.public String (char[ ] value ):将字符数组全部转为字符串
2.public String(char[ ] value,int offset,int len):
将字符数组的部分内容转为字符串

2.String -->char

取得字符串指定索引的字符,从0开始
public char charAt(int index);

3.String -->char[ ]

public char[ ] toCharArray() : 将字符串转为字符数组

举例:

public static void main(String[] args) {
    //判断一个字符串是否全部由数字组成
    String str1 = "1234";
    String str2 = "123a4";
}
public static boolean isNumber(String str){
    //String -->char[]
    char[] data = str.toCharArray();//将字符串转为字符数组
    for(int i = 0;i < data.length;i++){
        char c = data[i];
        if(c < '0 '|| c > '9') {
            return false;
        }
    }
    return true;
}

二.字节与字符串
字节用在二进制流与网络传输中
1.byte <–>String
byte[ ] -->String

1.public String(byte[ ] value):将字节数组全部转为字符串
2.public String(byte[ ] value,int offset,int len):
将字节数组的部分内容转为字符串

2.String -->byte[ ]

1.public byte[] getBytes():将字符串转为字节数组
2.public byte[] getBytes(String charSet):
将字符串按照指定编码格式转为字节数组

举例:

public static void main(String[] args) {
    String str1 = "helloworld";
    byte[] date = str1.getBytes();
    for (int i = 0;i < data.length;i++){
        data[i] -= 32;
    }
    System.out.println(new String(data,0,4));
}

三.字符串比较方法

  • 比较相等
    1.equals
    2.equalsIngoreCase
  • 比较大小
public int compareTo(String anotherString):比较两个字符串的大小关系

返回值:
负数:小于
0:相等
正数:大于

按照ASSCII码比较,只要发现不相等的内容算出差值直接返回,不会继续向下查找。
举例:

public static void main(String[] args) {
    String str1 = "abc";
    String str2 = "Abc";//"ABc"
    String str3 = "abc";
    System.out.println(str1.compareTo(str2));
    System.out.println(str2.compareTo(str1));
    System.out.println(str1.compareTo(str3));
}

四.字符串查找算法
contains

判断一个子字符串是否存在
public boolean contains(CharSequence s);

index0f : int

判断是否以指定字符串开头
public boolean startsWith(String prefix);

startsWith

从指定位置开始判断是否以指定字符串开头
public boolean startsWith(String prefix,int toffset);

endsWith

判断是否以指定字符串结尾
public boolean endsWith(String suffix);

五.字符串替换

  1. public String replaceAll(String regex,String replacement) :
    将字符串中所有指定内容替换为新内容
  2. public String replaceFirst(String regex(表达式),String replacement) :替换首个内容

六.字符串拆分

  1. public String[] split(String regex):按照指定格式将字符串全部拆分
  2. public String[] split(String regex,int limit):
    将字符串部分拆分,数组长度为限定limit长度

七.字符串截取

1.public String substring(int beginIndex):从指定索引开始截取到字符串结尾
  1. public String substring(int beginIndex,int endIndex):
    从指定索引开始到指定结束位置
    举例:
public static void main(String[] args) {
    String str = "helloworld";
    System.out.println(str.substring(5));
    //[ )
    System.out.println(str.substring(0,5));
}

运行结果:
在这里插入图片描述
八.其他方法

trim():去掉字符串的左右两边空格,中间保留
toUpperCase():将字符串转大写处理
toLowerCase():将字符串转小写处理
length():返回字符串长度
isEmpty():判断是否是空字符串,不包含null

举例:

public static void main(String[] args) {
    String str = "  hello world  ";
    System.out.println(str.trim());
    System.out.println(str.toUpperCase());
    System.out.println(str.toLowerCase());
    System.out.println(firstUpperCase("hello"));
    //如何将一个单词首字母大写?
}
public static String firstUpperCase(String str){
    return str.substring(0,1).toUpperCase()+
            str.substring(1);
}

其他操作方法:

1.去掉字符串中的左右空格,保留中间空格
public String trim()
2.字符串转大写
public String toUpperCase()
3.字符串转小写
public String toLowerCase()
4.取得字符串长度
public int Length()
5.判断是否为空字符串,但不是null,而是长度为0.
public boolean isEmpty()

StringBuffer

1.字符串拼接使用append()方法

public static void main(String[] args) {
    //方便进行字符串修改(在一块堆内存中)
    StringBuffer sb = new StringBuffer();
    sb.append("hello").append("world");
    System.out.println(sb);
}

2.String 和Stringbuffer类不能直接转换
I.如何将String和Stringbuffer互换:(String<–>Stringbuffer)
String–>Stringbuffer

  • a.通过StringBuffer的构造方法
    public StringBuffer(String str)

  • b.通过append(String str):StringBuffer

II.Stringbuffer–>String
调用StringBuffer的toString

public synchronized String toString();

III.独有方法:
字符串反转:reverse()
举例:

public static void main(String[] args) {
    //方便进行字符串修改(在一块堆内存中)
    StringBuffer sb = new StringBuffer();
    sb.append("hello").append("world");
    System.out.println(sb.reverse());
}

运行结果:
在这里插入图片描述
IV.删除指定位置字符串:delete(int start,int end)

public synchronized(同步) StringBuffer delete(int start,int end);

举例:

public static void main(String[] args) {
    //方便进行字符串修改(在一块堆内存中)
    StringBuffer sb = new StringBuffer();
    sb.append("hello").append("world");
    System.out.println(sb.delete(0,5));//左闭右开
}

运行结果:
在这里插入图片描述
IVV.在指定位置插入任意元素:insert(int offset,各种数据类型 )

public static void main(String[] args) {
    //方便进行字符串修改(在一块堆内存中)
    StringBuffer sb = new StringBuffer();
    sb.append("hello").append("world");
    System.out.println(sb.delete(0,5).insert(0,123));
}

运行结果:
在这里插入图片描述

  • StringBuilder
    详细请看String,StringBuffer与StringBulider 的区别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值