JavaSE的String类

目录

String类的两种实例化方式

String采用共享设计模式

字符与字符串的相互转换(**)

字节与字符串的相互转换

字符串相等比较(比较内容,而不是地址)

字符串比较

字符串查找(**)

字符串替换

字符串拆分

字符串截取

String类的其他方法

StringBuffer \  StringBuilder

 


 

String类的两种实例化方式

1.直接赋值(在堆上分配空间)---常用

String str = "hello";

2.传统方法--通过构造方法实例化String对象(会产生一块垃圾空间)----不推荐

String str = new String("hello");

String采用共享设计模式

JVM底层会自动维护一个字符串的对象池(就是一个对象数组:目的为了减小开销),如果现在采用直接赋值的形式进行String的对象实例化,该对象会自动保存在这个对象池中。下次继续使用直接赋值的模式声明String对象,此时对象池中若有指定内容,则直接引用;如果没有,则开辟新的堆空间后将其保存在对象池中供下次使用。

String str1 = "hello";  String str2 = "hello";  String str3 = "hello"; 

JavaSE的String类_第1张图片

手工入池(本地方法):public native String intern( );

String str1 = "hello";
String str2 = new String("hello").intern( );
//使用String构造方法会开辟一块新的空间存hello,这样有一块成为垃圾空间,也会对字符串共享产生问题,
可以采用手工入池的方法,解决这一问题
System.out.println(str1 == str2);//true

字符串常量不可变更。字符串一旦定义后不可改变。开辟新的堆空间,栈的指向在变..产生垃圾空间

原则:字符串别改变太多,不超过三次。


字符与字符串的相互转换(**)

1.将字符数组-->字符串

public String (char[ ] value)  //例 String str = new String(data);

public String (char[ ] value , int offset , int count)  //offset起始坐标  count个数

2.将字符串-->单个字符

public char charAt(int index)

例 "hello".charAt(5)

3.将字符串-->字符数组

public char[ ] toCharArray( );

例 char[ ] data = "hello".toCharArray( );

4.取得字符串长度

public int length( );

(※)判断一个字符串是否由数字组成?

public static boolean is Number(String str){
    char[] data = str.toCharArray();
    for(int i = 0; i '9') {
            return false;
        } else{
        return ture;
        }
    }
}

字节与字符串的相互转换

1.将字节数组byte[ ]-->字符串  -----网络传输使用

public String (char[ ] value)  //例 String str = new String(data);

public String (char[ ] value , int offset , int count)  //起始坐标 个数

2.将字符串-->字节数组(**)

public byte[ ] getBytes( );

3.将字符串按照指定编码-->字节数组

public byte[ ] getBytes(String charsetName);


字符串相等比较(比较内容,而不是地址)

public boolean equals(String anotherString)

例  str1.equals(str2)

解释"=="和"equals"的区别:前者比较的是两个对象所保存的内存地址数值,后者是两个字符串的内容。

字符串常量("...")是String的匿名对象。

public static void main(String[] args) {
        String str = null;
        System.out.println("hello".equals(str));//推荐写法
        System.out.println(str.equals("hello"));
    }
//运行结果↓↓↓

Tips:开发中,如果要判断用户输入的字符串是否等同于特定字符串,一定要将String常量写在前面,避免出现NullPointerException空指针异常。


字符串比较

1.区分大小写相等比较

public boolean equals(String anotherString)

2.不区分大小写相等比较

public boolean equalsIgnoreCase(String anotherString)

3.比较两个字符串大小

public int compareTo (String anotherString)

返回大于0:表示大于比较对象

返回等于0:表示两者相等

返回小于0:表示小于比较对象


字符串查找(**)

public boolean contains(String str):判断str在本字符串中是否存在。

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

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

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

indexOf(String str) :不存在返回-1 存在返回第一次出现的下标


字符串替换

public String replaceAll(String regex,String replacement):替换所有指定内容

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

正则表达式


字符串拆分

public String[] split(String regex):将字符串按照指定格式全部拆分

public String[] split(String regex,int limit):将字符串拆分,数组长度为limit

注意:\\. 有特殊含义的字符需要强转


字符串截取

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

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


String类的其他方法

1.去掉左右空格

public String trim();

2.字符串转大小写

public String toUpperCase();

public String toLowerCase();

3.判断字符串是否为空(只能判断是否为空字符串,不包含null)

public boolean isEmpty();


StringBuffer \  StringBuilder

方便进行字符串的修改,在java.lang包中

1.字符串修改

public StringBuffer append(各种数据类型)

StringBuffer sb = new StringBuffer();
sb.append ("hello").append(10); //将hello 和 10 拼在一起

String->StringBuffer

调用StringBuffer的构造方法或append();

StringBuffer->String

StringBuffer.toString();

2.字符串反转

public StringBuffer reverse();

3.删除指定范围的数据(因为在一块堆空间)

public StringBuffer delete(int start,int end);

4.插入数据

public StringBuffer insert(int offset,各种数据类型);

5.两者区别

String 的内容不可修改,而这两只sb可以改内容(append)

StringBuffer 采用同步处理,线程安全,效率较低

StringBuilder 采用同步处理,线程不安全,效率较高,String."+"底层会将String->StringBuilder

 

你可能感兴趣的:(java)