📄 java05_02.htm
字号:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Java程序设计</title>
</head>
<body background="Bg.gif">
<p align="center"><font size="5"><b>§5.2 字符串</b></font></p>
<p align="left">
字符串是程序设计中很重要的一类数据结构,一般的语言是通过字符型数组来保存字符串的。Java专门为其提供了两种类:String和StringBuff,并且为其提供了大量的方法以方便程序员对字符串进行操作,善用这些方法将大大提高编程效率。</p>
<p align="left">一、String类</p>
<p align="left"> String类可以用来保存一个字符串,该类有大量的方法处理这个字符串,对字符串数据的任何操作都必须通过这些方法来进行。注意:本类是最终类,不允许继承。</p>
<p align="left">1. 声明一个String类型的变量</p>
<p align="left">
String 变量名;</p>
<p align="left">2. 创建String类的对象</p>
<p align="left">① 初始化: String str="Hello"; </p>
<p align="left">② 通过new方法:String str=new String("Hello");
这里的构造方法有很多,我们后面会提到。</p>
<p align="left">③ 通过任何可以返回字符串的方法。Java中提供了大量的可以返回一个字符串的方法,用一个String变量接收这些返回值的同时就创建了该对象。</p>
<p align="left"> String的对象一旦创建,则字符串就存放在该对象中,所以为简单起见,我们将“本对象中存放的字符串”简称为“本字符串”。</p>
<p align="left">3.String对象的使用</p>
<p align="left"> 首先要明确一点:一旦创建了一个String对象,那么这个字符串的值是不能再部分更改的。像C++中经常这么写:<br>
String str="Hello";<br>
str[0]='h';<br>
现在str变成了:“hello”,这在Java中是不行的。除非为str重新赋值,写成这个样子:<br>
String str="Hello";<br>
str="hello";</p>
<p align="left"> 算上重载的,String中一共提供了67个方法,光是构造方法就有11个,我们先来看看String中一些常用的方法:</p>
<table border="1" width="94%">
<tr>
<td width="42%">char charAt(int index) </td>
<td width="58%">返回指定位置的字符</td>
</tr>
<tr>
<td width="42%">int compareTo(String anotherString) </td>
<td width="58%">比较本字符串与anotherString中的是否相等</td>
</tr>
<tr>
<td width="42%"> int compareToIgnoreCase(String str)</td>
<td width="58%">同上,但忽略大小写</td>
</tr>
<tr>
<td width="42%">String concat(String str)</td>
<td width="58%">将str串加到本对象中的字符串后面,返回这个新生成的串(注意:本字符串并没有变)</td>
</tr>
<tr>
<td width="42%">static String copyValueOf(char[] data) </td>
<td width="58%">用字符型数组data的值生成一个String对象,并返回</td>
</tr>
<tr>
<td width="42%"> int indexOf(int ch)</td>
<td width="58%">返回字符ch在本字符串中出现的位置</td>
</tr>
<tr>
<td width="42%">int indexOf(String str)</td>
<td width="58%">返回字符串str在本字符串中出现的位置</td>
</tr>
<tr>
<td width="42%">int length()</td>
<td width="58%">返回本字符串的长度</td>
</tr>
<tr>
<td width="42%">String replace(char oldChar, char newChar)</td>
<td width="58%">将本字符串的oldChar字符用newChar字符代替,返回新生成的这个串(注意:本字符串并没有变)</td>
</tr>
<tr>
<td width="42%">String substring(int beginIndex, int endIndex)</td>
<td width="58%">从本字符串的beginIndex位置开始到endIndex位置结束,截取一个子串,并返回该子串</td>
</tr>
<tr>
<td width="42%">char[] toCharArray() </td>
<td width="58%">用本字符串生成一个字符型数组并返回</td>
</tr>
<tr>
<td width="42%"> String toLowerCase()</td>
<td width="58%">将本字符串中的字符转换成小写字符,返回新生成的串</td>
</tr>
<tr>
<td width="42%">String toUpperCase()</td>
<td width="58%">将本字符串中的字符转换成大写字符,返回新生成的串</td>
</tr>
<tr>
<td width="42%">String trim()</td>
<td width="58%">将本字符串的头、尾空格去掉,返回新生成的串</td>
</tr>
</table>
<p align="left"> 如果需要更详细的说明,请查API手册。另外,还有一个“+”运算符可用于字符串的连接。下面我们来看一些例子:</p>
<p align="left">class useString{<br>
public static void main(String argv[]){<br>
int i; <br>
String str="Hello" ;<br>
//示例1. 求字符串的长度<br>
System.out.println(str+"的长度是:"+str.length());<br>
//示例2. 字符串的连接<br>
str.concat(" World"); //这个连接并没有改变str的值<br>
System.out.println(str);<br>
str=str+" World"; //这个才改变了str的值<br>
System.out.println(str+"的长度是:"+str.length());<br>
//示例3. 访问字符串中的字符<br>
for (i=0;i<str.length();i++) <br>
System.out.print(str.charAt(i));<br>
System.out.println();<br>
//示例4. 截取左子串<br>
System.out.println(str.substring(0,5));<br>
//示例5. 截取右子串<br>
System.out.println(str.substring(6,str.length()));<br>
//示例6. 比较字符串是否相等<br>
if (str.compareTo("Hello world")==0)<br>
System.out.println(str+" = Hello world");<br>
else <br>
System.out.println(str+" <> Hello world");<br>
//示例7. 去除头尾的空格<br>
str=" "+str+" ";<br>
System.out.println(str.trim()); <br>
}<br>
}</p>
<p align="left">4. String类型的数组</p>
<p align="left">
当需要用多个字符串时,经常要使用String类型的数组,一般可以通过初始化来为数组元素赋值,像下面这个样子:</p>
<p align="left">class ArrayString{<br>
public static void main(String argv[]){<br>
String s[]={"one","two","three","four"};<br>
int i;<br>
for(i=0;i<s.length;i++)<br>
System.out.println(s[i]);<br>
}<br>
}</p>
<p align="left">
如果不使用初始化,而是通过构造方法为元素赋值就要特别注意:</p>
<p align="left">class ArrayString{<br>
public static void main(String argv[]){<br>
String s[]={"one","two","three","four"};<br>
String other[];<br>
int i;<br>
other=new String[4]; //这个只构造了数组本身<br>
for(i=0;i<other.length;i++)<br>
other[i]=new String(s[i]); //这个才为元素构造了String对象<br>
for(i=0;i<s.length;i++)<br>
System.out.println(other[i]); <br>
}<br>
}</p>
<p align="left">
从上面这个例子中我们可以总结出一点:如果数组元素的类型是类,则需要进行两次构造:一次是构造数组本身,一次是为数组元素构造类的对象。</p>
<p align="left">二、StringBuffer类</p>
<p align="left"> 由于String对象中存放的字符串是不能修改的,所以如果要求经常增加、删除、修改串中的某些字符那么用String的就不方便,在这种情况下,我们可以使用StringBuffer类,它提供了一系列的方法允许对存放在其中的字符串完成上述操作。</p>
<p align="left">1. 声明StringBuffer类型的变量:</p>
<p align="left"> StringBuffer 变量名;</p>
<p align="left">2. 创建StringBuffer对象</p>
<p align="left"> 本类提供了三个构造方法:</p>
<p align="left">① StringBuffer()—— 这个构造方法为对象提供16个字符位,如下例:<br>
StringBuffer str=new StringBuffer();</p>
<p align="left">② StringBuffer(int length)——这个构造方法为对象提供length个字符位,如下例:<br>
StringBuffer str=new StringBuffer(1024);</p>
<p align="left">③ StringBuffer(String str)——这个构造方法用str为对象进行初始化,如下例:<br>
StringBuffer str=new StringBuffer("Hello");</p>
<p align="left">3. StringBuffer对象的使用</p>
<p align="left"> StringBuffer提供了一些能够部分修改存储在其中的字符串的方法,主要有下面这些:</p>
<table border="1" width="90%">
<tr>
<td width="52%">StringBuffer insert(int offset, String str)</td>
<td width="48%">将字符串str插入到本字符串指定的位置</td>
</tr>
<tr>
<td width="52%">StringBuffer append(String str)</td>
<td width="48%">将字符串str追加到本字符串的末尾</td>
</tr>
<tr>
<td width="52%">int capacity()</td>
<td width="48%">返回本对象可以容纳的字符数目</td>
</tr>
<tr>
<td width="52%">char charAt(int index)</td>
<td width="48%">返回index位置的字符</td>
</tr>
<tr>
<td width="52%">StringBuffer delete(int start, int end)</td>
<td width="48%">删除掉从start到end位置的子串</td>
</tr>
<tr>
<td width="52%"> StringBuffer deleteCharAt(int index)</td>
<td width="48%">删除掉index位置的字符</td>
</tr>
<tr>
<td width="52%">int length()</td>
<td width="48%">返回本对象中实际存储的字符数目</td>
</tr>
<tr>
<td width="52%">StringBuffer replace(int start, int end, String str)</td>
<td width="48%">将从start到end位置的子串用str代替</td>
</tr>
<tr>
<td width="52%">void setCharAt(int index, char ch)</td>
<td width="48%">在将字符char填充到index位置</td>
</tr>
</table>
<p align="left"> 注意capacity和length的区别,看下面这个例子:</p>
<p align="left">class useStrBuf{<br>
public static void main(String argv[]){<br>
StringBuffer str;<br>
str=new StringBuffer();<br>
System.out.println("capacity of str is : "+str.capacity() +" the content is: "+str); <br>
str=new StringBuffer(80);<br>
System.out.println("capacity of str is : "+str.capacity() +" the content is: "+str); <br>
str=new StringBuffer("Hello");<br>
System.out.println("capacity of str is : "+str.capacity() +" the content is: "+str); <br>
}<br>
}</p>
<p align="left"><a href="index.htm">回目录</a> <a href="java05_01.htm">上一课</a>
<a href="java05_03.htm">下一课</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -