字符串Word文档下载推荐.docx
《字符串Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《字符串Word文档下载推荐.docx(12页珍藏版)》请在冰点文库上搜索。
![字符串Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/41542fa3-1c81-481e-b901-7fb3f55ff06d/41542fa3-1c81-481e-b901-7fb3f55ff06d1.gif)
在上面的例子中,”+”运算符将字符串和数值型的变量连接了起来,系统自动将数值型变量转换成字符串。
也可以用简化运算符“+=”来向字符串末尾添加内容。
myName+=”Jr.”;
这个表达式等效于:
myName=myName+”Jr.”;
在这个例子中,它改变了myName的值,其值的后三个字符是“Jr.”。
二、常用方法
1.访问字符串对象
以字符串s=“Iamastudent.”为例
(1)intlength()
该方法返回字符串的长度,返回值类型为int;
如s.length()值为15;
(2)charcharAt(intindex)
该方法返回字符串中的第index个字符,返回值类型为char;
如s.charAt(0)值为I,s.charAt(7)值为s;
(3)intindexOf(intch)
该方法返回字符ch在字符串中第一次出现的位置,返回值类型为int;
如s.indexOf(‘a’)的值为2;
但如果字符串中没有字符ch,则返回值为-1;
字符大小写也有区别;
(4)intindexOf(Stringstr,intindex)
该方法的返回值是,在该字符串中,从第index个位置开始,字符串str第一次出现的位置,返回值类型为int;
如果没有对应的子字符串,则返回-1;
(5)StringsubString(intindex1,intindex2)
该方法的返回值是,在该字符串中,从第index1个位置开始,到第index2-1个位置结束的子字符串,返回值类型为String;
例:
MonthComp.java
(6)Stringtrim()
返回字符串的副本,忽略前导空白和尾部空白。
(7)Stringreplace(charoldChar,charnewChar)
返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar而生成的。
例如:
"
mesquiteinyourcellar"
.replace('
e'
'
o'
)
returns"
mosquitoinyourcollar"
(8)StringreplaceAll(String
regex,String
replacement)
使用给定的replacement字符串替换此字符串匹配给定的正则表达式的每个子字符串。
(9)String[]split(String
regex)
根据给定的正则表达式的匹配来拆分此字符串。
RecordSplit.java
2.字符串比较(以s=“student”为例)
(1)equals(Objectobj)
该方法将该字符串与obj表示的字符串进行比较,如果两者相等,函数的返回值为布尔型值true,否则为布尔型值false;
如s.equals(“Student”)的值为false,因区分大小写;
2)equalsIgnoreCase(Stringstr)
该方法将该字符串与str表示的字符串进行比较,但比较时不考虑字符的大小写,返回值为true或false;
(3)compareTo(Stringstr)
该方法将该字符串与str表示的字符串进行大小比较,返回值为int型;
如果该字符串比str表示的字符串大,返回正值;
如果比str小,返回负值;
如果相等,返回0。
如pareTo(“fivestudents”)值为正;
pareTo(“twostudents”)值为负;
pareTo(“students”)值为0。
3.与其他数据类型的转换
(1)将int、long、float、double、boolean等类型的数据转换为String类型:
String.valueOf(基本数据类型);
如String.valueOf(“1.2”)的值为字符串“1.2”
(2)字符串转为其他数据类型
方法
返回值类型
返回值
Boolean.getBoolean(“false”)
Boolean
False
Integer.parseInt(“123”)
Int
123
Long.parseLong(“375”)
Long
375
Float.parseFloat(“345.23”)
Float
345.23
Double.parseDouble(“67892.34”)
Double
67892.34
例CakeSale.java
5.2、StringBuffer类(jdk1.4)
1.StringBuffer类对象表示的是字符串变量(一种可变字符串对象),每一个StringBuffer类对象都是可以扩充和修改的字符串变量,包括字符串长度和字符串内容的改变。
以下是常用的StringBuffer类构造方法:
(1)publicStringBuffer()
(2)publicStringBuffer(intlength)
(3)publicStringBuffer(Stringstr)
StringBuffer对象的修改与String对象的修改有着本质的区别:
⑴String对象的改变会引发新对象的创建。
⑵StringBuffer对象的改变建立在原有对象基础之上。
2.StringBuffer类常用的方法
⑴为StringBuffer的对象插入和追加、删除字符串
【方法】字符串缓存追加方法
append(charc)将字符c放到字符串缓存区之后;
append(Stringstr)将字符串str放在字符串缓存区之后;
append(typevariable)可以把variable转换为字符串,并与当前字符串连接,type可以是字符串、字符数组、单个字符和数值数据。
【方法】字符串缓存插入方法
insert(intk,charc)在字符串缓存区的第k个位置插入字符c;
insert(intk,Stringstr)在字符串缓存区的第k个位置插入字符串str;
方法insert(intindex,typevariable)把variable转换为字符串,然后将其插入到当前字符串中指定index的位置,type可以是字符串、字符数组、单个字符和数值数据。
【方法】字符串缓存删除方法
deleteCharAt(intindex)删除字符串缓存区里第index位置的字符。
【方法】字符串缓存替换方法
replace(intm,intn,Stringstr)将字符串缓存区里第m到n之间以字符串str取代,不包括第n个字符。
setCharAt(intindex,charc)更换StringBuffer字符串对象中某个字符,index表示更换字符的下标位置,c表示替换的目标字符。
⑵获取和设置StringBuffer对象的长度和容量的方法:
length、capacity、setlength
s1.length()--------返回s1中字符个数。
s1.capacity()--------返回s1的容量,即内存空间数量。
通常会大于length()
s1.setlength(intnewLength)--------改变s1中字符的个数,如果newLength大于原个数,则新添的字符都为空("
);
相反,字符串中的最后几个字符将被删除。
例StringDemo.java用两种不同的字符串类来逆转字符串
classStringDemo{
publicstaticvoidmain(Stringargs[]){
Stringpalindrome="
DotsawIwasTod"
;
intlen=palindrome.length();
StringBufferdest=newStringBuffer(len);
for(inti=(len-1);
i>
=0;
i--){
dest.append(palindrome.charAt(i));
//charAt(i)返回i位置所对应的字符
}
System.out.println(dest);
}
5.3StringBuilder
StringBuilder在某些方面和StringBuffer功能类似,但是它不是线程安全的,性能比StringBuffer高,始于JDK1.5
5.4StringTokenizer
Java语言中,提供了专门用来分析字符串的类StringTokenizer(位于java.util包中)。
该类可以将字符串分解为独立使用的单词,并称之为语言符号。
语言符号之间由定界符(delim)或者是空格、制表符、换行符等典型的空白字符来分隔。
其他的字符也同样可以设定为定界符。
StringTokenizer类的构造方法及描述。
构造方法
描
述
StringTokenizer(Stringstr)
为字符串str构造一个字符串分析器。
使用默认的定界符,即空格符(如果有多个连续的空格符,则看作是一个)、换行符、回车符、Tab符号等
StringTokenizer(Stringstr,Stringdelim)
为字符串str构造一个字符串分析器,并使用字符串delim作为定界符
StringTokenizer类的主要方法及功能
方
法
功
能
StringnextToken()
用于逐个获取字符串中的语言符号(单词)
booleanhasMoreTokens()
用于判断所要分析的字符串中,是否还有语言符号,如果有则返回true,反之返回false
intcountTokens()
用于得到所要分析的字符串中,一共含有多少个语言符号
举例说明StringTokenizer类、类中方法的使用。
程序分析两个字符串,统计字符串中单词的个数。
StringTokenizer类的使用StringTokenizerDemo.java
importjava.util.*;
publicclassStringTokenizerDemo
{
publicstaticvoidmain(String[]args)
{
Stringstr1="
Helloworld!
ThisisJavacode,stringTokenizerDemo."
//声明并初始化字符串str1
Stringstr2="
HowtouseStringTokenizer?
StringTokenizer?
//声明并初始化字符串str2
StringTokenizerstrT1=newStringTokenizer(str1,"
.!
);
//创建StringTokenizer类的对象strT1,并构造字符串str1的分析器
//以空格符、"
"
、"
."
及"
!
作为定界符
StringTokenizerstrT2=newStringTokenizer(str2,"
?
//创建StringTokenizer类的对象strT2,并构造字符串str2的分析器
//以空格符及"
?
intnum1=strT1.countTokens();
//获取字符串str1中语言符号的个数
intnum2=strT2.countTokens();
//获取字符串str2中语言符号的个数
System.out.println("
str1has"
+num1+"
words.Theyare:
while(strT1.hasMoreTokens())
{
//利用循环来获取字符串str1中下一个语言符号,并输出
Stringstr=strT1.nextToken();
System.out.print("
\"
+str+"
"
\nstr2has"
+num2+"
while(strT2.hasMoreTokens())
//利用循环来获取字符串str2中下一个语言符号,并输出
Stringstr=strT2.nextToken();
运行结果如图所示。
图15-7
程序运行结果
讨论:
比较一下String、StringBuffer、StringBuilder三者的区别:
(1)String是字符串常量,长度不可变
(2)StringBuffer是线程安全的可变字符序列,这个类里的所有方法是同步的
(3)StringBuilder在某些方面和StringBuffer功能类似,但是它不是线程安全的,性能比StringBuffer高,始于JDK1.5
JAVA中String与StringBuffer的区别
在java中有3个类来负责字符的操作。
1.Character是进行单个字符操作的,
2.String对一串字符进行操作。
不可变类。
3.StringBuffer也是对一串字符进行操作,但是可变类。
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffersb=newStringBuffer();
note:
不能通过付值符号对他进行付值.
sb="
welcometohere!
//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("
hello"
字符串连接操作中StringBuffer的效率要比String高:
Stringstr=newString("
welcometo"
str+="
here"
的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后再将StringBuffertoSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.并且由于String对象是不可变对象,每次操作String都会重新建立新的对象来保存新的值.这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
看看以下代码:
将26个英文字母重复加了5000次,
Stringtempstr="
abcdefghijklmnopqrstuvwxyz"
inttimes=5000;
longlstart1=System.currentTimeMillis();
Stringstr="
for(inti=0;
i<
times;
i++)
str+=tempstr;
longlend1=System.currentTimeMillis();
longtime=(lend1-lstart1);
System.out.println(time);
可惜我的计算机不是超级计算机,得到的结果每次不一定一样一般为154735左右。
也就是154秒。
我们再看看以下代码
inttimes=5000;
longlstart2=System.currentTimeMillis();
StringBuffersb=newStringBuffer();
sb.append(tempstr);
longlend2=System.currentTimeMillis();
longtime2=(lend2-lstart2);
System.out.println(time2);
得到的结果为16有时还是0
所以结论很明显,StringBuffer的速度几乎是String上万倍。
当然这个数据不是很准确。
因为循环的次数在100000次的时候,差异更大。
不信你试试。
总结:
如果在程序中需要对字符串进行频繁的修改连接操作的话.使用StringBuffer性能会更高