Java中String类详解

  1. 实例化方式

直接赋值(用到最多)
String str = “hello”;

通过构造方法赋值
String str = new String(“hello”);

  1. 字符串相等比较

"=="比较的两个操作数的值,对于基本类型而言比较的就是值的大小,对于引用类型而言,比较的是两者指向的堆内存地址是否相同。

比较字符串内容是否相等时,使用equals()

  1. 字符串常量是String类的匿名对象

字符串常量:使用""括起来的内容字符串常量。所有字符串 常量都是String的匿名对象。

在进行指定字符串内容与字符串对象比较时,把字符串常量写在equals前,避免NullPointerException

  1. 两种实例化模式的区别

推荐使用直接赋值的方式实例化String对象

String类采用共享设计模式:
JVM底层会维护一个字符串常量池(字符串数组),若采用直接赋值的形式进行String类的实例化操作。那么该对象会自动保存在对象池中。如果下次即系采用直接赋值的形式,首先在对象池中查看是否有指定内容,若有,直接引用。若没有,产生新的对象后入池。

采用构造方法:

4.1.采用构造方法实例化的String对象不会入池。
手工入池:intern()

4.2.使用构造方法实例化String对象时会产生两块内存空间,其中一块为垃圾空间。

  1. 字符串不可变更

字符串常量不可变。

字符串的+操作不要出现太多次数,会产生大量垃圾空间。

  1. 字符与字符串String<->char’

字符串就是一个字符数组

I.将char[]->String
调用String的构造方法实现
public String(char value[]):将字符数组所有内容转为String
public String(char value[],int offset,int count):
将字符数组部分转为字符串。
String.valueOf()

II.String -> char
public char charAt(int index):取得字符串指定索引的字符
public char[] toCharArray();

判断一个字符串是否全部由数字组成?

public static boolean isAllNumber(String str) {
        // 1.将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. 字符串与字节的转换 String <-> byte

I.字节数组 -> 字符串
构造方法

II.String -> byte
public byte[] getBytes(); 将字符串全部转为字节数组

public byte[] getBytes(String charSetName):将字符串以指定编码转为字节数组

  1. 字符串比较

boolean equals():区分大小写比较
boolean equalsIgnoreCase():不区分大小写比较
int compareTo(String anotherString):当碰到第一个不相等的字符时,终止比较,返回两个字符的ASCII差值。

0 : 表示当前字符串 > 目标字符串
=0 : 表示当前字符串等于目标字符串
<0 : 表示当前字符串 < 目标字符串

  1. 字符串查找

从完整的字符串中判断指定内容是否存在

public boolean contains(String str) : 判断一个子字符串是否存在

public int indexOf(String str) : 从头开始查找子字符串的位置,若找到返回开始索引,否则返回-1

public int lastIndexOf(String str) : 从后向前查找指定字符串,若找到返回开始索引,否则返回-1

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

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

  1. 字符串替换

public String replaceAll(String regex,String replacment):
将regex内容的字符串全部替换为replacment

public String replaceFirst(String regex,String replacment) :
替换首个内容

  1. 字符串拆分

将一个完整的字符串按照指定的格式拆分为若干个子字符串
public String[] split(String regex) :
将字符串全部拆分

public String[] split(String regex,int limit):
将字符串按照指定格式拆分为limit个子字符串

若拆分结果为空,指定字符串内容需要转义\

  1. 字符串截取

public String substring(int beginIndex) : 从指定索引位置开始截取到字符串结尾

public String substring(int beginIndex,int endIndex) :
截取部分内容

首字母大写处理

public static String upperCaseFirstChar(String str) {
        return str.substring(0,1).toUpperCase() +
            str.substring(1);
    }
  1. 其他操作方法

trim():去掉字符串左右空格

toUpperCase():将字符串转为全大写
toLowerCase():将字符串转为全小写

length():返回字符串长度
isEmpty():返回是否是空字符串,不包含null的情况

判断空字符串:
if(str == null || str.isEmpty()) {}

  1. 两个sb(StringBuffer,StringBuilder)类

由于字符串常量不可变更,为了方便进行字符串内容的修改,引入了两个SB类。

在字符串中使用"+"进行字符串内容的拼接操作,这种拼接操作会产生大量垃圾空间。

引入两个SB类后,字符串拼接操作改为调用append(各种数据类型):StringBuffer

String与SB的相互转换

String -> StringBuffer

I.调用StringBuffer的构造方法
II.调用append()

StringBuffer -> String
I.调用toString()

public synchronized StringBuffer append(Object obj)
public StringBuilder append(Object obj)

String类与StringBuffer、StringBuilder的区别:
I.字符串常量不可变更,而StringBuffer与StringBuilder内容可以修改(append).String变量在使用"+"进行字符串拼接时,javac编译器会将String变量变为StringBuilder而后进行append处理。

II.StringBuffer采用同步处理,线程安全,性能较低;
StringBuilder采用异步处理,线程不安全,性能较高。

字符串反转reverse();

内容删除delete(int start,int end);

插入数据insert(int offset,插入内容);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值