java String / StringBuilder / StringBuffer 的使用

参考:《Java语言程序设计》第4章


####################################################################


字符串是字符的序列,它是许多程序设计语言的基本数据结构,Java语言是通过字符串类实现的。

Java语言提供了3个字符串类:String类 / StringBuilder类 和 StringBuffer类。

String类是不变字符串,StringBuilder类和StringBuffer类是可变字符串。这3种字符串都是16位的Unicode字符序列,并且这3个类都被声明为final,因此不能被继承


########################################################################


String类


字符串长度及提取单个字符

public int length()
返回字符串的长度,即字符串包含的字符个数。注意,对含有中文或其他语言符号的字符串,计算长度时,一个符号作为一个字符技术。

public boolean isEmpty()
返回字符串是否位空(""),如果length()的结果为0,此方法返回true,否则返回false

public char charAt(int index)
返回字符串中制定位置的字符,index表示位置,范围为0~s.length()-1


字符串连接及子串

public String concat(String str)
将调用字符串与参数字符串连接起来,产生一个新的字符串。 其功能和符号+一样,所以用+更简

public String substring(int beginIndex, int endIndex)
从字符串的下标beginIndex开始到endIndex结束产生一个子字符串

public String substring(int beginIndex)
从字符串的下标beginIndex开始到结束产生一个子字符串

public String replace(char oldChar, char newChar)
将字符串中的所有oldChar字符改变为newChar字符,返回一个新的字符串

public String toUpperCase()
将字符串中所有字符转换成大写字母

public String toLowerCase()
将字符串中所有字符转换成小写字母

public boolean startsWith(String prefix)
返回字符串是否以某个字符串prefix开始

public boolean endsWith(String suffix)
返回字符串是否以某个字符串suffix结尾

public String trim()
返回去掉了前后空白字符的字符串对象


字符串查找

public int indexOf(int ch)
查找字符ch 第一次出现的位置。如果查找不成功则返回-1,下述方法相同

public int indexOf(int ch, int fromIndex)
查找字符ch 从fromIndex开始第一次出现的位置(在原字符串中的下标)

public int lastIndexOf(int ch)
查找字符ch最后一次出现的位置

public int lastIndexOf(int ch, int endIndex)
查找字符ch到endIndex为止最后一次出现的位置

public int indexOf(String str)
查找 字符串str第一次出现的为止

public int indexOf(String str, int fromIndex)
查找字符串str从fromIndex开始第一次出现的位置(在原字符串中的下标)

public int lastIndexOf(String str)
查找字符串str最后一次出现的位置

public int lastIndexOf(String str, int endIndex)
查找字符串str到endIndex为止最后一次出现的位置


字符串与数组的转换

字符串不是数组,但字符串能够转换成数组

public char[] toCharArray()
将字符串中的字符转换为字符数组

public bye[] getBytes[]
使用平台默认的字符集将字符串编码成字节序列并将结果存储到字节数组中

public byte[] getBytes(String charsetName)
使用指定的字符集将字符串编码成字节序列并将结果存储到字节数组中。如果使用了系统不支持的字符集名称,该方法抛出java.io.UnsupportedEncodingException异常

public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符串中从起始位置(srcBegin)到结束位置(srcEnd)之间的字符复制到字符数组dst中,dstBegin为目标数组的起始位置


字符串的解析

String类提供了一个split()方法,用于实现将一个字符串分解成子字符串或令牌(Token)的功能。该方法使用正则表达式制定分隔符,有以下两种方式:

public String[] split(String regex, int n)
参数regex表示正则表达式, n表示模式应用的次数。如果n的值为0,则模式将应用尽可能多的次数,末尾的空字符串被丢弃。如果n的值大于0,则模式至多被应用n-1次,结果数组的长度不大于n,数组的最后一项将包含最后一个匹配的分隔符外的所有输入内存。如果n的值不小于0,则模式将应用尽可能多的次数。

public String[] split(Strng regex)
等价于上述n为0的情况

例如,正则表达式[ ,.]表示使用空格 / 逗号或句点为分隔符解析字符串


字符串常量与字符串的比较

在Java中,凡是由双引号定界的字符序列都是字符串常量(Literal String),如"Hello"。字符串常量存放在字符串常量池中。字符串常量也是String类的对象,可以直接使用

字符串相等的比较

1.使用"=="来比较两个字符串的内容是否相同

2.使用equals()方法进行比较


字符串大小的比较

使用equals()方法只能比较字符串相等与否,要比较字符串的大小,可以使用String类的compareTo()方法:

public int compareTo(String anotherString)
该方法将当前字符串与参数字符串比较,并返回一个整数值。字符串比较使用字符的Unicode码值。若当前字符串小于参数字符串,方法返回值小于0;若当前字符串大于参数字符串,方法返回值大于0;若当前字符串等于参数字符串,方法返回值等于0。


命令行参数

Java应用程序的执行是从main()方法开始的,main()方法的声明格式为:

public static void main(String[] args){}
static public void main(String[] args){}

main()方法的参数String[] args称为命令行参数,它是一个字符数组,该参数是在程序运行时通过命令行传递给main()方法的

比如,程序要求从命令行为程序HelloProgram传递3个参数,在main()方法中通过args[0] / args[1] / args[2]输出这3个参数的值

HelloProgram how are you
此时传入参数"hou",参数"are",参数"you"
在命令行中参数字符串是通过空格分隔的。但如果参数本身包含空格,则需要用双引号将参数括起来。

Java解释器根据传递的参数个数确定数组args的长度,如果给出的参数少于引用的元素,则抛出ArrayIndexOutOfBoundsException运行时异常。

命令行参数传递的是字符串,若将其作为数值处理,需要进行转换。


##################################################################


StringBuilder类

StringBuilder类是Java 1.5新增加的,它表示可变字符串。StringBuilder类常用的构造方法有3个:

public StringBuilder()
创建一个没有字符的字符串缓冲区,初始容量位16个字符。此时length()方法的值为0,而capacity()方法的值为16。

public StringBuilder(int capacity)
创建一个没有字符的字符串缓冲区,capacity为指定的初始容量

public StringBuilder(String str)
利用一个已存在的字符串对象str创建一个字符串缓冲区对象,另外再分配16个字符的缓冲区


StringBuilder类除定义了length() / charAt() / indexOf() / getChars()等方法外,还提供以下常用方法:

public int capacity()
返回当前的字符串缓冲区的总容量

public void setCharAt(int index, char ch)
用ch修改指定位置的字符

public StringBuilder deleteCharAt(int index)
删除指定位置的字符

public StringBuilder append(String str)
在当前的字符串的末尾添加一个由str指定的字符串。该方法有一系列的重载方法,参数可以是boolean, char,int,long,float,double,char[]等任何数据类型

public StringBuilder insert(int offset, String str)
在当前字符串的指定位置插入由str指定的一个字符串。这个方法也有多个重载的方法,参数可以是boolean / char / int / long / float / double / char[]等类型

public StringBuilder delete(int start, int end)
删除从start开始到end(不包括end)之间的字符

public StringBuilder replace(int start, int end, String str)
用字符str替换从start开始到end(不包括end)之间的字符

public StringBuilder reverse()
将字符串的所有字符反转

public String substring(int start)
返回从start开始到end(不包括end)之间的子字符串

public String substring(int start, int end)
返回从start开始到end(不包括end)之间的子字符串

public void setLength(int newLength)
设置字符序列的长度。如果newLength小于原字符串的长度,字符串将被截短,如果newLength大于原字符串的长度,字符串将使用空字符('\u0000')补充


运算符"+"的重载

运算符"+"除用于计算两个数之和外,还用于连接两个字符串。当用"+"运算符连接的两个操作数有一个是String类型时,该运算即为字符串连接运算

例如:

int age=18
String s="He is "+age+" years old."

上述连接运算过程实际上是按如下方式进行:

String s=new StringBuilder("He is ").append(age).append(" years old.").toString()



#########################################################################


StringBuffer类

StringBuffer类中定义了与StringBuilder类中相同的方法。StringBuffer类与StringBuilder类的区别是StringBuffer类的实例是线程安全的,而StringBuilder类的实例不是线程安全的。所以,考虑使用StringBuffer类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值