• 1. 第九章 字符串第四篇 Java语言基础类
  • 2. 9.1 基本字符串操作 9.2 字符串比较 9.3 实用功能 9.4 建立相关字符串 9.5 字符串转换 9.6 字符串与char数组 9.7 字符串与byte数组 9.8 StringBuffer类 9.8.1 修改缓冲区 9.8.2 提取数据 9.8.3 容量管理 9.9 小结第九章 字符串
  • 3. Java字符串是语言支持的内置标准对象。Java中,表示字符串有两个类: String :适用于字符串常量,即一经创建就不再修改的字符串。 StringBuffer :适用于需要做许多操作的字符串。第九章 字符串PROGRAMHELLO0PROGRAMHELLO0CLASS
  • 4. String类的创建有两种: 隐式创建 使用引号(例如 “Grobe”)来创建 用 + 或 += 作用于两个String对象来创建出一个新的String对象 显式创建 new机制来构造String对象9.1 基本字符串操作public String( ); //构造一个值为“”的新String-构造一个空字符串public String( String value );//构造一个值为value的新的String
  • 5. String对象的两个最常用方法是length( )和charAt( ) length( ):返回字符串中的字符个数 charAt( ):返回字符串中指定位置上的字符 在charAt或任何其它String方法中,访问小于0或大于length( )-1的字符串位置会引发IndexOutOfBoundsException; 由indexOf名复用而得的几个索引方法用于字符串中前向搜索; 由 lastIndexOf名复用得到的则对字符串中后向搜索。它们都返回得到的下标,如果搜索失败则返回-1。9.1 基本字符串操作 方法  返回下标 indexOf(char ch)  ch的第一个位置 indexOf(char ch, int start)  不小于start的ch的第一个位置 indexOf(String str)  str的第一个位置 indexOf(String str, int start)  不小于start的str的第一个位置 lastIndexOf(char ch)  ch的最后一个位置 lastIndexOf(char ch, int start)  不大于start的ch的最后一个位置 lastIndexOf(String str)  str的最后一个位置 lastIndexOf(String str, int start) 不大于start的str的最后一个位置
  • 6. 字符串比较最常用的两个方法: equals( ) //具有相同内容 普通的比较运算符“= =” //具有相同的对象引用书写定义equals( ) 两个字符串具有相等的长度和 完全相同的 Unicode字符时,返回trueequalsIgnoreCase( )忽略大小写的方式比较两个字符串compareTo( )字符串之间比较(小于、等于、大于)regionMaches( )对字符串的一部分进行比较startsWith( )对字符串的开始是否是某个字符串进行简单的检测endsWith( )对字符串的末尾是否是某个字符串进行简单的检测9.2 字符串比较equals equalsIgnoreCase
  • 7. equals( )和equalsIgnoreCase( ) 它们与运算符‘= =’实现的比较是不同的。运算符‘= =’比较两个对象是否引用同一个实例,而equals( )和equalsIgnoreCase( )则比较两个字符串中对应的每个字符值是否相同。 9.2 字符串比较String str1 = "Panda"; String str2 = "PandaChina"; String str3 = str1 + "China";if (str3 == str2) System.out.println("=="); else System.out.println("!=");if(str3.equals(str2)) System.out.println("equals"); else System.out.println(“not equals");其它比较方法!=equalsif(str1=="Panda") System.out.println(“=="); else System.out.println(“!=");==String str1 = "Panda"; String str2 = "Panda"; if(str1==str2) System.out.println(“=="); else System.out.println(“!=");==
  • 8. String类提供了两种在特殊应用中很有用的功能 hashCode:它返回基于字符串内容的散列码 任意两个内容相同的字符串具有相同的散列码,还应注意,两个字符串尽管不同也可能有相同的散列码。 intern:返回与调用它的字符串内容相同的一个String 任意两个内容相同的字符串由intern返回的String对象引用相同。 9.3 实用功能String str1 = "Panda"; String str2 = "PandaChina"; String str3 = str1 + "China"; String str4 = str2.intern( ); String str5 = str3.intern( );if(str4 == str5) System.out.println(“== intern");== intern
  • 9. 几个String方法返回与已有字符串相关的新串,但做了一定的更改。 String对象是只读的,所以这些方法均返回新字符串。书写定义public String replace (char oldChar, char newChar)返回字符串中所有oldChar字符 均替换为newChar字符的一个新字符串public String toLowerCase( )返回将字符串中所有字符均转换为 小写的一个新字符串public String toUpperCase( )返回将字符串中所有字符均转换为 大写的一个新字符串public String trim( )返回去掉原字符串中所有 开始和末尾空白的新字符串public String concat ( )等价于用 + 作用于两个字符串9.4 建立相关字符串
  • 10. 字符串与其他类型的转换,Java转换的约定是被转换为的类型提供转换的方法。例如把一个String转换为一个Integer需要类Integer的一个静态方法 。类型转换为String从String转换boolean String.valueOf(boolean)Boolean.parseBoolean(String)byteString.valueOf(int)Byte.parseByte(String, int base)shortString.valueOf(int)Short.parseShort(String, int base)int String.valueOf(int)Integer.ParseInt(String, int base)long String.valueOf(long)Long.ParseLong(String, int base)float String.valueOf(float)Float.parseFloat(String)doubleString.valueOf(double)Double.parseDouble(String)9.5 字符串转换base:基数(2~23),默认是10。
  • 11. 一个String对应一个char数组,反之亦然。 将一个char数组转换为一个String对象。 public String(char[] value, int offset, int count) 内容是char数组中从offset开始的count个字符。 public String(char[] chars) // 0, chars.length 将一个String转换为字符数组,可使用toCharArray( )方法 。 当从字符数组创建了一个String后,再改变字符数组的内容将不再影响已创建的String。 getChars( ):将当前字符串的子串拷贝到指定数组 。 public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 子串是从srcBegin开始到srcEnd,但不包含srcEnd,拷贝到从dst[dstBegin]开始的字符数组 。9.6 字符串和char数组
  • 12. Java提供8位字符数组与16位Unicode String对象之间相互转换的一些方法。方法方法说明public String(byte[] bytes, int offset, int count)该构造器构作一个新String, 其值为数组bytes的指定子数组, 即从offset开始的count个字符。public String(byte[] bytes)是String(bytes, 0, bytes.length)的缩写public byte[] getBytes()返回一个字节数组,采用缺省区域的 缺省编码对字符串内容进行编码。9.7 字符串和byte数组
  • 13. StringBuffer类允许用户创建可以以各种方式修改的String对象,当用户使用StringBuffer类的字符串时,用户并没有创建一个新的String对象,而是直接操作原字符串本身。 StringBuffer类的构造器: public StringBuffer( ):构造一个初始值为“”的StringBuffer public StringBuffer(String str) :构造一个初始值为str的StringBuffer StringBuffer与String类似,它和String支持的一些方法具有相同的名字和约定。然而,StringBuffer与String并非相互扩展而来,它们均为独立的类,都是Object的扩展。9.8 StringBuffer类
  • 14. 对一个StringBuffer对象的缓冲区有几种方式进行修改方法方法说明setCharAt( )用来改变特定位置的字符setLength( )用来截取或扩充缓冲区中的字符串append( )将任一数据类型转换为一个String,然后将结果添加到末尾insert( )将任一数据类型转换为一个String,然后将结果插入到指定位置 插入会按照需要移动原有字符,以便把字符插入到正确位置reverse( )将StringBuffer中字符的顺序倒转 “good” => “doog” 9.8.1 修改缓冲区 9.8.2 提取数据从一个StringBuffer对象获得一个String对象-toString方法。要子串-substring方法。要一部分或全部-getChars方法。方法方法说明public void getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin)把缓冲区中的字符(从srcBegin到srcEnd) 拷贝到指定数组dst,该数组从dst[dstBegin]开始 接收字符。拷贝的字符从srcBegin开始, 到srcEnd结束,但不包括srcEnd上的字符。
  • 15. StringBuffer对象缓冲区的容量,是指在其必须分配更大空间之前,现在能够存储的字符串的长度。当字符增加时,该缓冲区可自动增大。方法方法说明public StringBuffer (int capacity)构造一个初始容量为capacity, 初始值为“”(空串)的StringBufferpublic void ensureCapacity (int minimum)确保缓冲区的容量至少为minimumpublic int capacity()返回缓冲区的当前容量9.8.3 容量管理
  • 16. java.lang.String和java.lang.StringBuffer是Java提供的标准类,这一点Java优越于C/C++。 C/C++没有提供任何针对字符串的机制,它们的字符串实际上是以’\0’结尾的字符数组 Java把字符串及其操作封装到类中,就避免了破坏或引用其它对象所占用的内存区域9.9 小结