Java字符串处理.docx
- 文档编号:7962997
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:29
- 大小:31.95KB
Java字符串处理.docx
《Java字符串处理.docx》由会员分享,可在线阅读,更多相关《Java字符串处理.docx(29页珍藏版)》请在冰豆网上搜索。
Java字符串处理
字符串处理
目录
第1章概述1
第2章String构造函数1
第3章字符串的长度3
第4章特殊的字符串操作4
4.1字符串字面量4
4.2字符串的连接4
4.3字符串和其他数据类型的连接5
4.4字符串的转换和toString()6
第5章字符截取7
5.1charAt()7
5.2getChars()8
5.3getBytes()8
5.4toCharArray()8
第6章字符串比较9
6.1equals()和equalsIgnoreCase()9
6.2redionMatches()10
6.3startsWith()和endsWith()10
6.4equals()与==11
6.5compareTo()11
第7章搜索字符串13
第8章修改字符串15
8.1substring()15
8.2concat()16
8.3replace()16
8.4trim()17
第9章使用valueOf()进行数据转换18
第10章改变字符串中字符的大小写18
第11章附加的String方法19
第12章StringBuffer20
12.1StringBuffer构造函数20
12.2length()和capacity()21
12.3ensureCapacity()21
12.4setLength()22
12.5charAt()和setCharAt()22
12.6getChars()23
12.7append()23
12.8insert()24
12.9reverse()25
12.10delete()和deleteCharAt()25
12.11replace()26
12.12substring()26
12.13附加的StringBuffer方法27
第13章StringBuilder28
第1章概述
像大多数编程语言一样,在Java中,字符串是字符的序列。
但是与许多其他以字符数组实现字符串处理的编程语言不同,Java是以String类型的对象来实现字符串的。
Java将字符串作为内置的对象处理,就提供了丰富的特性来处理字符串。
例如:
Java语言有多种方法用于比较两个字符串、查找字串、连接字符串以及改变字符串中字母的大小写。
而且,可以通过多种方式来构造String对象,这样在需要时可以很容易地获得一个字符串。
有些出乎意料的是,当创建一个String对象时,所创建的字符串是不可改变的。
也就是说,一旦创建了一个String对象,就不能改变里面的字符。
这给人的初步印象好像是严格约束,但实际上并不是这样的,你仍可以完成各种类型的字符串操作。
不同之处在于,每次需要修改现有的字符串时,一个包含修改结果的String对象被创建,而原来的字符串不变。
只用这种方式是因为固定不变的字符串执行效率比变化的字符串要高。
在需要使用可修改的字符串时,Java提供两个选项,StringBuffer和StringBuilder。
它们包含的字符串在创建后可以修改。
String、StringBuffer和StringBuilder类都是在java.lang中定义的。
因此,它们能被所有程序使用。
它们都被声明为final类型,这意味着它们不能产生子类。
这允许某些增强性能的优化可作用于普通的字符串操作。
这三个类都实现CharSequence接口。
最后声明一点:
String类型的字符串不能改变意味着String实例的内容在创建后不能改变。
然而,声明为String对象引用的变量在任何时候都可以改变,以指向一些其他的String对象。
第2章String构造函数
String类支持几种构造函数,调用默认的构造函数可以创建一个空字符串。
例如:
Strings=newString();
将创建一个String实例,该实例中不包含字符。
如果创建有初始值的字符串,String类提供了一系列构造函数来完成该功能。
为了创建由字符数组初始化的字符串,可以使用下面的构造函数:
String(charchars[])
下面是一个例子:
charchars[]={'a','b','c'};
Strings=newString(chars);
这个构造函数用字符串“abc”来初始化s。
可以使用下面的构造函数指定字符数组的一个范围为初始化值。
String(charchars[],intstartIndex,intnumChars)
这里,startIndex指定子范围开始的下标,numChars指定所用字符的个数。
这里有一个例子:
charchars[]={'a','b','c','d','e','f'};
Strings=newString(chars,2,3);
它使用cde初始化。
用下面的构造函数可以构造一个String对象,该对象包括了与另一个String对象相同的字符序列。
String(StringstrObj)
这里,strObj是String对象,请看下面的例子:
//ConstrustoneStringfromanother.
classMakeString{
publicstaticvoidmain(String[]args){
charc[]={'J','a','v','a'};
Strings1=newString(c);
Strings2=newString(s1);
System.out.println(s1);
System.out.println(s2);
}
}
程序输出如下:
Java
Java
可以看到s1和s2包含相同的字符串。
Java的Char类型使用16位(bit)Unicode字符集,在Internet中,字符串的典型是使用从ASCII字符集构造的8位字节数组。
因为一般使用8位ASCII字符串,当给定一个字节数组时,String类提供了初始化字符串的构造函数。
它们形式如下:
String(byteasciiChars[])
String(byteasciiChars[],intstartIndex,numChars)
这里,asciiChars指定字节数组。
第二种形式允许指定一个范围。
在每一种构造函数中,字节到字符的转换是通过使用平台默认的字符编码完成的。
下面的程序说明了这些构造函数:
//Constructstringfromsubsetofchararray.
classSubStringCons{
publicstaticvoidmain(String[]args){
byteascii[]={65,66,67,68,69,70};
Strings1=newString(ascii);
System.out.println(s1);
Strings2=newString(ascii,2,3);
System.out.println(s2);
}
}
程序输出如下:
ABCDEF
CDE
字节—字符转换构造函数的扩展版本是通过指定字节到字符转换的字符编码来定义的。
但大多数时间使用的是平台默认编码。
第3章字符串的长度
字符串的长度是指包含的字符个数。
为了获取该值,调用length()方法,如下所示:
intlength()
下面程序结果是3,因为s中有3个字符。
charchars[]={'a','b','c'};
Strings=newString(chars);
System.out.println(s.length());
第4章特殊的字符串操作
因为字符串是编程中一个通用而且重要的部分,Java在语法中为字符串操作添加了特殊的支持。
这些操作包括从字符串的字面量中自动创建的新字符串实例。
通过+运算符连接多个字符串对象,转换其他数据类型为字符串形式等。
尽管有显示的方法可以执行这些函数,但是Java可以自动完成这些操作以方便编程人员,同时增加代码的清晰度。
4.1字符串字面量
前面的例子是使用new操作从字符数组显示的创建一个String实例,但是有一种更容易的实现方式,即使用字符串字面量。
对于程序中的每个字符串字面量,Java自动的构造一个String对象,因此可以使用字符串字面量初始化一个String对象。
例如,下面的代码片段创建两个相等的字符串。
charchars[]={'a','b','c'};
Strings1=newString(chars);
Strings2="abc";
因为Java自动为每个字符串字面量创建String对象,所以可以在能够用String对象的任何地方使用字符串字面量。
例如,可以直接用引号内的字符串,就像是一个对象的引用,如下面的语句所示。
该条语句调用“abc”字符串的length()方法,结果是打印“3”。
System.out.println("abc".length());
4.2字符串的连接
一般情况下Java不允许运算符直接应用于String对象,唯一的例外是+运算符,它用来连接两个字符串,结果产生一个新的字符串。
同时,也允许使用一连串的+运算符。
例如:
Stringage="9";
Strings="Heis"+age+"yearsold.";
System.out.println(s);
它显示字符串“Heis9yearsold.”。
字符串连接的是一个实际应用是,当要创建一个很长的字符串时,可以将其拆开,然后使用+将各子串连接起来,以避免源代码中长字符串的换行。
下面是一个例子:
//Usingconcatenationtopreventlonglines.
classConCat{
publicstaticvoidmain(String[]args){
StringlongStr="Thiscouldhavebean"+
"averylonglinethatwouldhave"+
"wrappedarround.Butstringconcatenation"+
"preventsthis.";
System.out.println(longStr);
}
}
4.3字符串和其他数据类型的连接
在Java中,还可以把字符串和其他的数据类型相连接。
例如,考虑与前面例子略有差别的一个例子:
intage=9;
Strings="Heis"+age+"yearsold.";
System.out.println(s);
本例中,age是一个整型(int)而不是另一个String型值,但是产生的输出与前面一样。
这是因为age的int值在String对象中会自动转化为它的字符串形式,然后这个字符串和前面一样被连接。
这是因为只要+运算符的一个操作数是String实例,编译器就会将另一个操作数转换为它的字符串形式。
对于其他类型的数值,在于字符串连接表达式混合时应当谨慎,因为有时会得到很意外的结果。
如下面的情况:
Strings="four:
"+2+2;
System.out.println(s);
它的结果显示:
four:
22
而不是预期的:
four:
4
原因是这样的:
由于运算符的优先级高,所以“four:
”与2的字符串形式的连接首先发生,然后,它的结果再与2的字符串形式再连接一次。
若要先完成整数的加法,必须使用括号,如下所示:
Strings="four:
"+(2+2);
现在s包含了字符串“four:
4”。
4.4字符串的转换和toString()
在连接过程中,当Java将数据转换为字符串形式时,它是通过调用一个字符串转换方法valueOf()的重载版本来完成的。
valueOf()是String类定义的方法,valueOf()被重载后用于所有的简单数据类型的Object类型。
对于简单数据类型,valueOf()返回一个字符串,该字符串包含了被调用的值的可读值。
对于Object类型,valueOf()调用该对象的toString()方法。
每一个类都实现了toString()方法,它是由Object类定义的,但toString()的默认实现往往是不够的。
因为对大多数自创建的重要的类来说,通常要重写toString()并提供自己的字符串表单形式。
幸运的是,这很容易做到。
toString()方法的一般形式如下:
StringtoString()
要实现toString()方法,只需要返回一个String对象,该对象包含描述类对象的可读字符串。
通过重写所创建类的toString(),可以将其完全集成到Java的编程环境中。
例如,它可用于print()和println()语句以及连接表达式中。
下面程序重写了类Box的toString()方法。
//OverridetoString()forBoxclass.
classBox{
doublewidth;
doubleheoght;
doubledepth;
Box(doublew,doubleh,doubled){
width=w;
height=h;
depth=d;
}
publicStringtoString(){
return"Dimensionsare"+width+"by"+depth+"by"+height+".";
}
}
classToStringDemo{
publicstaticvoidmain(String[]args){
Boxb=newBox(10,12,14);
Strings="Boxb:
"+b;
System.out.println(b);
System.out.println(s);
}
}
程序的输出结果如下:
Dimensionsare10.0by14.0by12.0
Boxb:
Dimensionsare10.0by14.0by12.0
可以看到,当Box对象在连接表达式中使用或出现在调用println()中时,Box的toString()方法被自动调用。
第5章字符截取
String类提供了几个从字符串中截取字符的方法,下面逐一介绍。
尽管在String对象中构成字符串的字符不能像字符数组一样被索引,但利用下标(或偏移)可以对字符串进行操作。
就像数组一样,String的下标从0开始。
5.1charAt()
为了从一个字符串(String)中截取一个字符,可以通过charAt()方法直接引用单个字符。
其一般形式如下:
charcharAt(intwhere)
这里,where是想要获取的字符下标。
where的值必须为非负,因为它指定了在字符串中的位置。
charAt()返回指定位置的字符。
例如:
charch;
ch="abc".charAt
(1);
将“b”赋值给ch。
5.2getChars()
如果需要一次截取多个字符,可以使用getChars()方法。
它的一般形式如下:
voidgetChars(intsourceStart,intsourceEnd,chartarget[],inttargetStart)
这里sourceStart指定了子串开始字符的下标,sourceEnd指定了子串结束后的下一个字符的下标。
因此,子串包含从sourceStart到sourceEnd-1的字符。
接收字符的数组由target指定,target中开始复制了串的下标值是targetStart。
注意,要确保target数组足够大,以便容纳指定的子串。
下面的程序演示了getChars():
classGetCharsDemo{
publicstaticvoidmain(String[]args){
Strings="ThisisademoofthegetCharsmethod.";
intstart=10;
intend=14;
charbuf[]=newchar[end–start];
s.getChars(start,end,buf,0);
System.out.println(buf);
}
}
输出结果如下:
demo
5.3getBytes()
替代getChars()的一种方法是将字符存储在字节数组中,该方法即getBytes(),它使用平台提供的默认的字符转换到字节的方法。
下面是它的最简形式:
byte[]getBytes()
也可以使用其他形式的getBytes()。
getBytes()经常用于将字符串值输入一个不支持16位Unicode字符的环境中,例如,多数Internet协议和文本格式使用8位ASCII进行文本交换。
5.4toCharArray()
如果想将字符串对象的所有字符转换到一个字符数组中最简单的方法就是调用toCharArray()。
它返回输入字符串的字符数组。
char[]toCharArray()
这是一种简洁方法。
使用getChars()也可以达到同样的目的。
第6章字符串比较
String类包括几种比较字符串或子串的方法,下面分别进行介绍。
6.1equals()和equalsIgnoreCase()
要比较两个字符串是否相等,使用equals()。
它的形式如下:
booleanequals(Objectstr)
这里str是与调用字符串对象进行比较的字符串对象。
如果字符串包含同样顺序的同样字符,它返回true。
否则,返回false。
比较时是区分大小写的。
如果要进行忽略大小写的比较,可以调用equalsIgnoreCase()。
当它比较两个字符串时,它认为A-Z和a-z是一样的。
它的一般形式如下:
booleanequalsIgnoreCase(Objectstr)
这里,str是与调用字符串比较的字符串对象。
如果两个字符串包含同样顺序字符,啊返回true。
否则,返回false。
下面是一个演示equals()和equalsIgnoreCase()的例子:
//Demonstrateequals()andequalsIgnoreCase().
classEqualsDemo{
publicstaticvoidmain(String[]args){
Strings1="Hello";
Strings2="Hello";
Strings3="Good-bye";
Strings4="HELLO";
System.out.println(s1+"equals"+s2+"-->"+s1.equals(s2));
System.out.println(s1+"equals"+s3+"-->"+s1.equals(s3));
System.out.println(s1+"equals"+s4+"-->"+s1.equals(s4));
System.out.println(s1+"equalsIgnoreCase"+s4+"-->"+
s1.equalsIgnoreCase(s4));
}
}
程序输出部分如下:
HelloequalsHello-->true
HelloequalsGood-bye-->false
HelloequalsHELLO-->false
HelloequalsIgnoreCaseHELLO-->true
6.2regionMatches()
regionMatches()方法用于比较一个字符串中特定区域与另一个字符串的另一特定区域,它有一个重载的形式允许在比较中忽略大小写。
下面是这方法的两种常用形式:
booleanregionMatches(intstartIndex,Stringstr2,intstr2StartIndex,intnumChars)
booleanregionMatches(booleanignoreCase,intstartIndex,Stringstr2,intstr2StartIndex,
intnumChars)
两种版本中,startIndex都是指字符串的区域的开始点,被比较的字符串由str2指定,str2的开始由str2StartIndex指定,numChars是指被比较的子串的长度,如果ignoreCase为true,字符比较忽略大小写,否则区分大小写。
6.3startsWith()和endsWith()
String定义了两个例程,它们可以说是regionMatches()的特殊形式。
startsWith()方法决定字符串是否特定字符开始,endsWith()方法决定给字符串是否是以特定字符串结果。
它们的一般形式如下:
booleanstartsWith(Stringstr)
booleanendsWith(Stringstr)
这里,str是被测试的字符串。
如果字符串匹配,返回true,否则返回false。
例如:
"Foobar".endsWith("bar")
和
"Foobar".startsWith("Foo")
都返回true。
第二种形式的startsWith()如下所示,需要指定起始点:
booleanstartsWith(Stringstr,intstartIndex)
这里,startIndex指调用字符串搜索的开始点,例如:
"Foobar".startsWith("bar",3)
将返回true。
6.4equals()与==
equals()方法和==运算符完成的是两个不同的操作。
equals()方法是比较字符串对象中的字符,==运算符比较两个对象是否引用同一实例。
在下面的程序中,两个不同的字符串包含同样的字符,但是对引用的比较是不相等的。
//equals()vs==
classEqualsNotEqualsTo{
publicstaticvoidmain(String[]args){
Strings1="Hello";
Strings2="Hello";
System.out.println(s1+"equals"+s2+"-->"+s1.equals(s2));
System.out.println(s1+"=="+s2+"-->"+(s1==s2));
}
}
变量s1引用值是为“Hello”的一个字符串实例
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 字符串 处理
![提示](https://static.bdocx.com/images/bang_tan.gif)