【Java学习】Java字符串类String、StringBuffer/StringBuilder及其常用操作

文章目录

  • 1 Java中的字符串
    • 1.1 String、StringBuffer和StringBuilder的区别
      • 1.1.1 String的不可变性
      • 1.1.2 可变字符串类型StingBuffer和StringBuilder
      • 1.1.3 String、StringBuffer和StringBuilder的选用
  • 2 String类的常用操作
      • 2.1 创建String对象
    • 2.2 获取长度:int length()
    • 2.3 特定位置字符:char CharAt(int index)
    • 2.4 字符串与字符数组
    • 2.5 提取子串
    • 2.6 字符串比较
    • 2.7 检索
    • 2.8 字符串匹配
    • 2.9 常用变换
    • 2.10 String 和基本类型的转化
  • 3 StringBuffer/StringBuiler的使用
    • 3.1 StringBuffer对象创建
    • 3.2 字符串修改
    • 3.3 与String保留一致的方法

1 Java中的字符串

Java中的字符串类型是一种引用类型java.lang.String。另外,还有两种辅助字符串类型java.lang.StringBufferjava.lang.StringBuilder

1.1 String、StringBuffer和StringBuilder的区别

1.1.1 String的不可变性

String是字符串常量类,最大的特点就是不可修改。

看下面代码:

String s="Hello";
System.out.println(s);
s="Hello World";
System.println(s);

输出结果为:

Hello
Hello World

看似s的内容改变了。但是,上面的代码实际上是先把内容为"Hello"的字符串对象赋给s,后来又把内容为"Hello World"的对象赋给s,并不是在一个对象上改变它的内容。事实上,String类封装了一个final的char[]类型属性。
【Java学习】Java字符串类String、StringBuffer/StringBuilder及其常用操作_第1张图片
String字符串的不可变性有很对好处,比如字符串常量池的实现、字符串的安全性与高效性。关于String的深入剖析涉及到JVM的运行机制,有兴趣可以看一下这篇博客:深入理解Java中的String(大坑)
但同时使得涉及字符串内容的更新操作都会创建一个新的String对象,影响性能。所以,为了高效完成字符串的修改操作,Java提供了StringBuffer类和StringBuilder类。

1.1.2 可变字符串类型StingBuffer和StringBuilder

StringBuffer是一个具有缓存区的字符串类,支持字符串的动态修改,并且是线程安全的。
为了适应只有当线程的情况,Java5.0提出了StringBuilder类,它与StringBuffer具有基本一样的方法,但是线程不安全。

1.1.3 String、StringBuffer和StringBuilder的选用

根据这三个类的特点,选用的基本原则是:

1.字符串内容不变的用String。
2.单线程需要修改字符串内容用StringBuilder。
3.多线程修改字符串内容用StringBuffer。

2 String类的常用操作

2.1 创建String对象

1.字符串常量直接赋值。如String s="Hello"
2.使用new。如String s=new String("Hello")
【注】情况1是最常用的。1和2的区别在于字符串的储存位置,设计JVM知识。
3.从char[]创建字符串String(char[] value)String(char[] value, int offset, int count)。
4.从StringBuffer/StringBuilder类创建字符串对象String(StringBuffer/StringBuilder buffer)stringBuffer.toString()

2.2 获取长度:int length()

2.3 特定位置字符:char CharAt(int index)

2.4 字符串与字符数组

我们常常需要用到字符串与字符数组直接的转化。
1.char[] ->String : String(char[] value)String(char[] value, int offset, int count)
2.String -> char[] :char[] toCharArray()void getChars(int srcBegin, int srcEnd,char[] dst, int dstBegin)
【注】getChars(int srcBegin, int srcEnd,char[] dst, int dstBegin)将源字符串的[srcBegin,srcEnd)赋给dst的[dstBegin,dstBegin+srcBegin-srcEnd)。如

char[] ch=new char[6];
"Hello World".getChars(2,8,ch,0);   //char=[l,l,o, ,W,o]

2.5 提取子串

提取子串最常用的方法是String substring(int offset,int end)
此外,当子串为后缀时,也可以用Stirng substring(int offset)方法。

2.6 字符串比较

1.判等boolean equals(String anotherString)
当忽略大小写时,有boolean equalsIgnoreCase(String anotherString)
【注】字符串的判等千万不能用==
2.字典顺序比较int compareTo(String anotherString)
int compaerToIgnoreCase(String anotherString)忽略大小写
【注】s1.compareTo(s2)的返回值:s1在字典前于s2,返回负数,后于s2返回正值,s1与s2内容相等返回0。
3.与StringBuffer/StringBuilder判等:boolean contentEquals(StringBuffer buffer)

2.7 检索

1.int indexOf(int ch)int indexOf(int ch, int fromIndex)
2.int indexOf(String substr)int indexOf(String substr)
3.int lastIndexOf(int ch)int lastIndexOf(int ch, int fromIndex)
4.int lastIndexOf(String substr)int lastIndexOf(String substr)
记忆:检索用indexOf,支持字符和字符串的检索,如果需要,第二个参数指定检索开始位置,需要检索最后位置时用LastIndex。

2.8 字符串匹配

1.是否包含boolean contains(String str)
2.前缀检查boolean startsWith(String prefix)boolean startsWith(String prefix, int toffset)
3.后缀检查boolean endsWith(String suffix)
4.正则表达式匹配boolean matches(String regex)

2.9 常用变换

虽然String是常量类型,当时,从原有字符串创建新的字符串也很常见,下面是一些常见的字符串变换。
1.大小写转化String toUpperCase()String toLowerCase()
2.单个字符替换String replace(char oldChar, char newChar)。(会替换所有)
3.字符串替换String replaceAll(String regex, String dst)String replaceFirst(String regex, String dst)
4.去掉首尾空格:String trim()。

2.10 String 和基本类型的转化

1.基本类型 -> String:Stirng.valueOf()
【注】valueOf的参数可以是任何基本类型对象,它会返回对应对象的字符串形式。
2.String->基本类型: 可以用数据基本类型的包装类型(Integer、Double、Byte、Long、Float)的对应静态函数parseXXX()实现String类型到基本类型的转化。另外,String->boolean类型是用Boolean.getBoolean(String str)

3 StringBuffer/StringBuiler的使用

因为StringBuilder与StringBuffer的方法基本一致,这里用StringBuffer示例,StringBuilder也有同样方法。

3.1 StringBuffer对象创建

构造函数StringBuffer()StringBuffer(String str)使得可以创建一个空串的StringBuffer对象,也可以从已有字符串创建StringBuffer对象。

3.2 字符串修改

StringBuffer的意义就是为了支持字符串的修改,所以这部分的使用十分重要。
1.从末尾添加append()方法支持从StringBuffer的字符串末尾添加各种类型的字符串形式,使用时,参数为添加的对象。
2.指定插入:insert()方法支持指定位置的添加,第一个参数为插入位置,第二个参数为插入内容,支持对种类型。
3.删除:delete(int offset,int end)deleteCharAt(int index)
4.指定位置字符替换:setCharAt(int index, char ch)
5.指定位置字符串替换:replace(int start,int end,String str)
6.反转字符串reverse()

3.3 与String保留一致的方法

String中有些字符串很常用的方法,在StringBuffer与StringBuilder中也有一样的 。
如:CharAtindexOf

你可能感兴趣的:(Java学习)