Java中的字符串

一、String类

1、String类也是Object类的子类,同样也会继承Object方法,有些方法会被String类重写

2、String类代表字符串,java程序中的字符串自面值都作为此类的实例存在

3.String类变量的值不能被改变,所以,String对象是不可变的

4、字符串内部,实际上是由一个字符数组组成的,是一个字符序列

5、构造方法:

5/1    String(byte[] byteArray):会将byte数组中的元素自动提升为char型,变成char型

byte[] byteArray  ={97,98,99,100};

String str  =newString(byteArry);

输出abcd

public String():初始化一个新创建的 String 对象,使其表示一个空字符序列。注意,由于 String 是不可变的,所

以无需使用此构造方法。

public String(String original):使用一个String构造一个String;

以下构造方法将byte数组和char数组转换为String

public String(byte[] bytes):使用一个byte[]数组构造一个String;

public String(byte[] bytes,intoffset,int length):使用一个byte[]数组,从offset位置开始,取length个长度构造一个String

public String(char[] value):使用一个char[]数组构造一个String:

public String(char[] value,intoffset,int count):使用char[]数组的一部分构造一个字符串;

6、String类的其它功能:

6/1 替换功能

        Stringreplace(char old,char new):将字符串中的old字符替换为new字符

        Stringreplace(String old,String new):将字符串中的old子串,替换为new子串

6/2 去除字符串两空格

        Stringtrim()

6/3 按字典顺序比较两个字符串  :按照ASCII码值的顺序比较;主要看三种类型的结果:

6/3/1 负数:当前对象比参数"小";2:为0:当前对象跟参数"相同";3:正数:当前对象比参数"大";

6/3/2 长度相同,按位比;长度不同,比长度差;当前对象的字符长度 - 参数对象的字符长度

                intcompareTo(String str):区分大小写:

                 intcompareToIgnoreCase(String str):不区分大小写:

6/4 判断功能

boolean equals(Object obj):区分大小写:比较两个字符串是否相同,如果两个字符串中包含相同的字符序列,则返回true,否则返回false

boolean equalsIgnoreCase(String str):将此 String 与另一个 String 比较,不考虑大小写。

boolean contains(String str):区分大小写:当且仅当此字符串包含指定的 char 值序列时,返回true。

boolean startsWith(String str):区分大小写:测试此字符串是否以指定的前缀开始。

boolean endsWith(String str):区分大小写:测试此字符串是否以指定的前缀结束:

boolean isEmpty():当且仅当 length() 为 0 时返回 true。跟地址无关;

6/5 获取功能

int length():区分数组的length属性。返回此字符串的长度。

char charAt(int index):返回指定索引处的 char 值。

int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。如果未出现该字符,则返回 -1。

int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。如果未出现该字符,则返回 -1。

int indexOf(int ch,int fromIndex):返回指定字符在此字符串中第一次出现处的索引。从fromIndex处开始找

int indexOf(String str,int fromIndex)返回指定字符串在此字符串中第一次出现处的索引。从fromIndex处开始找

String substring(int start):返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。

String substring(int start,int end):回一个新的字符串,它是此字符串的一个子字符串.

从start开始,到end - 1(不包含end的元素)

6/6 转换功能

byte[] getBytes():将字符串转换为byte[]数组;

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

static String valueOf(char[] chs):将一个char[]数组,转换为一个String;

static String valueOf(int i):把一个int值,转换为字符串;

String toLowerCase():全部转换为小写

String toUpperCase():全部转换为大写;

String concat(String str):将参数字符串str添加到本字符串的末尾;

 

7、String类的不可变性

1、     String str = "Hello";

str = "Java";

Hello是一个字面常量,存放在方法区的常量池中,为其分配一个空间和地址,str中保存这个地址。

执行str = "Java"是在常量池中另外分配一个空间和新的地址,str保存一个新的地址

 

8、对于字符串类的赋值比较特殊,可以不使用new关键字,而直接赋值

9、当我们使用一个字符串自字面量是,虚拟机会现在常量池中查找看有么有此常量,如果没有,会开辟新的空间,返回一个新的引用,如果有则返回此值的引用

9/1     (1)String str = "Hello";//开辟新的空间,存储Hello

(2)String str1 = "Hello";//会将(1)中“Hello”的地址赋给str1,str和str1保存的地址相同

String str = "Hello" +"World";这条语句产生三个内存空间:“Hello”、“World”、“HelloWorld”

字符串做运算时,如果表达式用有变量存在则会产生一个新的空间

 (3)System.out.println(str == str1);//true

9/2   (1) String str = new String("Hello");

(2)  String str1 = newString("Hello");

System.out.println(str == str1);//false开辟了两段空间,存储在堆区

System.out.println(str.equals(str1));//String类重写了Object的equals()方法,仅仅比较值,值相同则返回true

10、  String str = null;

System.out.println(str.length());//报空指针异常。引用类型如果为空,则还没在堆中为对象开辟空间,想要访问成员变量都访问不到

 

11、byte数组转换成字符串的两种方式

使用构造方法:

char[] charArray = {'a' ,'b' ,'c'};

①String str = new String(charArray);

②String str = String.valueOf(charArray);

11、Stringint类型数据的转换

6/1 int--->String

 6/1/1 public static StringvalueOf(int i)

 6/1/2int --> Integer -->toString()-->String

 6/1/3 Integer -->静态方法toString(int n):

6/2 String --> int:

6/2/1 Integer --> 静态方法:parseInt(Strings):

6/2/2 Integer --> Integer valueOf(Strings) --> intValue() --> int



 二、StringBuffer

1、StringBuffer是对字符串进行操作的类,尤其是对字符串的增删操作,其内部的字符序列是可以改变的

 

2、stringBuffer一定要使用构造方法产生对象,不可以直接赋一个字面常量

 

3、StringBuffer的两个概念:

3/1 容量:

最大可以存放的字符的数量(默认为16个字符)

3/2 长度:

实际存放的字符的数量(默认为0)

注意:容量和长度会自动维护,使用过程中会自动增长

 

4、构造方法:

StringBuffer():构造一个16个容量的StringBuffer;(常用。容量对于我们程序员来说,一般情况下可以不用考虑)

StringBuffer(String str):使用一个String构造一个StringBuffer;

StringBuffer(int capacity):使用一个容量值构造一个StringBuffer;

5、添加方法

append(各种数据类型):将各种数据类型的数据添加到当前内部字符序列的末尾;

insert(int offset,String str):将参数str插入到当前字符序列的offset位置。之前offset位置上的字符,依次后移;

6、删除方法:

deleteCharAt(int index):删除index位置上的字符;

delete(int start,int end):删除从start开始,到end - 1处的字符;

7、替换功能

public StringBuffer replace(int start,int end,String str)

8、获取方法:

length():获取内部字符的长度;

capacity():获取内部的容量;

9、反转功能:

public StringBuffer reverse():将内部字符序列首位调换;

10、获取当前系统的毫秒值

long start =System.currentTimeMills();//获取当前系统的毫秒值,从1970年1月1日开始到现在的毫秒值

11、截取功能

public String substring(int start):从start开始,截取到末尾;截取后,原Buffer中的内容不变;

public String substring(int start,intend):从start开始,到end- 1  处;

public void getChars(int srcBegin,int srcEnd,char[]desCharArray,int desBegin),将字符序列复制到一个字符数组中

12、String类和StringBuffer类的区别

10/1    String类是不可变的

StringBuffer是可变的

13、String StringBuffer的相互转换:

 13/1 我们经常会有一些字符串,想对它们进行频繁的拼接操作,这时需要将String转换为StringBuffer:

String--> StringBuffer:

1.StringBuffer的构造方法:StringBuffer(String str)

2.StringBuffer的append(String str)方法

 13/2 如果我们操作某个StringBuffer后,想将StringBuffer转换为String:

StringBuffer的toString()方法:(从Object继承的,内部重写后的)


三、StringBuilderStringBuffer的区别

1StringBuffer

1/1 JDK1.0开始

1/2 线程安全(一个StringBuffer对象可以安全的被多个线程并发访问)

1/3 由于是线程安全的,所以内部做了很多线程方面的处理,所以降低了工作效率

2StringBuilder

2/1 JDK5.0开始

2/2 线程不安全(一个StringBuilder只能被单线程访问,如果多线程访问的话,不保证内部数据的一致性)

2/3 由于线程不安全,内部没做线程方面的处理,工作效率相对较高

 

四、StringBuffer与数组的区别

1StringBuffer:可以存储任何数据类型

数组:只能存储定义数组时指定的那个数据类型的数据

2StringBuffer:后期内部长度和容量是可以改变的

数组:定义数组时指定了长度,后期不可再改变


五、String与其他类型的转换

1Stringint类型数据的转换

1/1 int--->String

 1/1/1 静态方法publicstatic String valueOf(int i)

 1/1/2int --> Integer -->toString()-->String

 1/1/3 Integer -->静态方法toString(int n)

 1/1/4 加上一个空串

1/2 String --> int

 1/2/1 Integer --> 静态方法:parseInt(Strings)

 1/2/2Integer --> Integer valueOf(String s) -->intValue() --> int

 

2String与字节数组的转换

2/1 String--->字节数组

public byte[] getBytes()

2/2 字节数据--->String类型

2/2/1 使用String的构造方法:

public String(byte[] bytes):使用一个byte[]数组构造一个String;

public String(byte[] bytes,intoffset,int length):使用一个byte[]数组,offset位置开始,取length个长度构造一个String

 

3String与字符数组的转换

2/1 字符数组--->String

2/2/1 使用构造方法

public String(char[] value):使用一个char[]数组构造一个String:

public String(char[] value,intoffset,int count):使用char[]数组的一部分构造一个字符串;

2/2/2 使用valueOf()方法:String str = String.valueOf(charArray);

使用包装类:Character ch = Character.parse

2/2 String--->字符数组

2/2/1 public char[] toCharArray()

 

4String StringBuffer的相互转换

4/1 我们经常会有一些字符串,想对它们进行频繁的拼接操作,这时需要将String转换为StringBuffer:

String--> StringBuffer:

1.StringBuffer的构造方法:StringBuffer(String str)

2.StringBufferappend(String str)方法

 4/2 如果我们操作某个StringBuffer后,想将StringBuffer转换为String:

StringBuffertoString()方法:(从Object继承的,内部重写后的)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值