Java字符、字符串、数组.ppt
学习导读学习导读 字字符符、字字符符串串、数数组组都都是是使使用用Java语语言言编编制制程程序序要要经经常常使使用用的的数数据据结结构构,因因此此,熟熟练练掌掌握握这这些些数数据据结结构构是是进进一一步步学学习习Java程程序序设设计计的的必必要要阶阶段段。通通过过本本章章的的学学习习,应应该该能能够够熟熟练练掌掌握握字字符符、字字符串、数组的各种基本操作。符串、数组的各种基本操作。第6章 字符、字符串、数组教学重点与难点教学重点与难点:v字符与字符串的区别v字符串常量与String类v字符串变量与StringBuffer类v数组与数组类Arrays 6.1 字符字符 字符是指用单引号括起来单个字符,如a、b、A等。这里的字符不是指占1个字节的ASCII字符,而是指占2个字节的Unicode字符。因为Unicode被设计用来处理现在世界上所有书面语言中的字符,所以一个汉字也是被当作一个字符来处理的。对于单个字符,除了有char这个原始类型以外,Java平台中的java.lang包还专门提供了一个Character类来进行储存和操作。6.1.1 Character类的构造函数类的构造函数 Character类只能用于存储和操作单一的字符数值,Character类的对象包含了单一字符数值。以下是Character类提供的构造函数:public Character(char)参数必须为一个char类型数据,它创建了一个Character对象,该对象包含了由参数提供的数值。一旦Character对象被创建,它包含的数值就不能改变。下面的语句将创建一个Character对象a,该对象包含字符数据b:Character a=new Character(b);6.1.2 Character类提供的常用方法类提供的常用方法 1public int compareTo(Character)compareTo(Character)是一个实例方法,参数必须为一个Character对象,而不能是char类型数据。该方法比较两个Character对象包含的数值,返回一个整数表明在当前对象中的数值是否大于、等于或者小于参数给定的数值。2public boolean equals(Object obj)equals()是一个实例方法,用于比较两个对象。用于Character类对象时,该方法比较当前对象容纳的数值和参数对象容纳的数值。在两个对象容纳的数值相等的时候返回true,否则返回false。3public String toString()()所有的类从对象类继承了toString方法。toString是一个实例方法,它将对象转换为字符串。该方法用于Character类对象时,结果的字符串在长度为1,并且它包含了有这个Character对象容纳的数值。4public char charValue()()charValue是一个实例方法,它返回Character对象的字符。5public static boolean isUpperCase(char)isUpperCase(char)是一个类方法,该方法用来判断字符参数值是否为大写。当字符参数值是大写时,返回值为true,否则返回false。【例6.1】Character类提供的常用方法6.2 字符串字符串 字符串指的是字符的序列,有两种类型的字符串:一种是创建以后不需要改变的,称为字符串常量,在Java中,String类用于存储和处理字符串常量;另外一种字符串是创建以后,需要对其进行改变的,称为字符串变量,在Java中,StringBuffer类用于存储和操作字符串变量。6.2.1 字符串常量与字符串常量与String类类 在Java中,没有内置的字符串类型,字符串常量是作为String类的对象存在的。1 1创建创建StringString类对象类对象 String类的对象表示的是字符串常量,一个字符串常量创建以后就不能够被修改了。所以在创建String类对象时,通常需要向构造函数传递参数来指定创建的字符串的内容。以下是常用的String类构造函数:(1)public String()()该构造函数用于创建一个空的字符串常量。(2)public String(String value)该构造函数用于根据一个已经存在的字符串常量来创建一个新的字符串常量,该字符串的内容和已经存在的字符串常量一致。(3)public String(char value)该构造函数用于根据一个已经存在的字符数组来创建一个新的字符串常量。数组将在本章后面的内容中介绍。(4)public String(StringBuffer buffer)该构造函数用于根据一个已经存在的StringBuffer对象来创建一个新的字符串常量。2String类对象的常用操作及方法类对象的常用操作及方法 在Java中,String类包含有50多个方法来实现字符串的各种操作,以下介绍一些我们需要经常使用的方法。(1)字符串的连接 public String concat(String str)该方法的参数为一个String类对象,作用是将参数中的字符串str连接到原来字符串的后面。(2)求字符串的长度 public int length()返回字串的长度,这里的长度指的是字符串中Unicode字符的数目。(3)求字符串中某一位置的字符 public char charAt(int index)该方法在一个特定的位置索引一个字符串,以得到字符串中指定位置的字符。值得注意的是,在字符串中第一个字符的索引是0,第二个字符的索引是1,依次类推,最后一个字符的索引是length()1。【例6.2】求字符串的长度及每一个位置上的字符 (4)字符串的比较 比较字符串可以利用String类提供的下列方法:1)public int compareTo(String anotherString)该方法比较两个字符串,和Character类提供的compareTo方法相似,Character类提供的compareTo方法比较的是两个字符类数据,而这里比较的是字符串数据。其比较过程实际上是两个字符串中相同位置上的字符按Unicode中排列顺序逐个比较的结果。如果在整个比较过程中,没有发现任何不同的地方,则表明两个字符串是完全相等的,compareTo方法返回0;如果在比较过程中,发现了不同的地方,则比较过程会停下来,这时一定是两个字符串在某个位置上不相同,如果当前字符串在这个位置上的字符大于参数中的这个位置上的字符,compareTo方法返回一个大于0的整数,否则返回一个小于0的整数。2)public boolean equals(Object anObject)该方法比较两个字符串,和Character类提供的equals方法相似,因为它们都是重载Object类的方法。该方法比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。3)public boolean equalsIgnoreCase(String anotherString)该 方 法 和 equals方 法 相 似,不 同 的 地 方 在 于,equalsIgnoreCase方法将忽略字母大小写的区别。(5)从字符串中提取子串 利用String类提供的substring方法可以从一个大的字符串中提取一个子串,该方法有两种常用的形式:1)public String substring(int beginIndex)该方法从beginIndex位置起,从当前字符串中取出剩余的字符作为一个新的字符串返回。2)public String substring(int beginIndex,int endIndex)该方法从当前字符串中取出一个子串,该子串从beginIndex位置起至endIndex-1为结束。子串返的长度为endIndex-beginIndex。(6)判断字符串的前缀和后缀 判断字符串的前缀是否为指定的字符串利用String类提供的下列方法:1)public boolean startsWith(String prefix)该方法用于判断当前字符串的前缀是否和参数中指定的字符串prefix一致,如果是,返回true,否则返回false。2)public boolean startsWith(String prefix,int toffset)该方法用于判断当前字符串从toffset位置开始的子串的前缀是否和参数中指定的字符串prefix一致,如果是,返回true,否则返回false。判断字符串的后缀是否为指定的字符串利用String类提供的方法:public boolean endsWith(String suffix)该方法用于判断当前字符串的后缀是否和参数中指定的字符串suffix一致,如果是,返回true,否则返回false。(7)字符串中单个字符的查找 字符串中单个字符的查找可以利用String类提供的下列方法:1)public int indexOf(int ch)该方法用于查找当前字符串中某一个特定字符ch出现的位置。该方法从头向后查找,如果在字符串中找到字符ch,则返回字符ch在字符串中第一次出现的位置;如果在整个字符串中没有找到字符ch,则返回-1。2)public int indexOf(int ch,int fromIndex)该方法和第一种方法类似,不同的地方在于,该方法从fromIndex位置向后查找,返回的仍然是字符ch在字符串第一次出现的位置。3)public int lastIndexOf(int ch)该方法和第一种方法类似,不同的地方在于,该方法从字符串的末尾位置向前查找,返回的仍然是字符ch在字符串第一次出现的位置。4)public int lastIndexOf(int ch,int fromIndex)该方法和第二种方法类似,不同的地方在于,该方法从fromIndex位置向前查找,返回的仍然是字符ch在字符串第一次出现的位置。(8)字符串中子串的查找 字符串中子串的查找与字符串中单个字符的查找十分相似,可以利用String类提供的下列方法:1)public int indexOf(String str)2)public int indexOf(String str,int fromIndex)3)public int lastIndexOf(String str)4)public int lastIndexOf(String str,int fromIndex)(9)字符串中字符大小写的转换 字符串中字符大小写的转换,可以利用String类提供的下列方法:1)public String toLowerCase()()该方法将字符串中所有字符转换成小写,并返回转换后的新串。2)public String toUpperCase()()该方法将字符串中所有字符转换成大写,并返回转换后的新串。(10)字符串中多余空格的去除 public String trim()该方法只是去掉开头和结尾的空格,并返回得到的新字符串。值得注意的是,在原来字符串中间的空格并不去掉。(11)字符串中字符的替换 1)public String replace(char oldChar,char newChar)该方法用字符newChar替换当前字符串中所有的字符oldChar,并返回一个新的字符串。2)public String replaceFirst(String regex,String replacement)该方法用字符串replacement的内容替换当前字符串中遇到的第一个和字符串regex相一致的子串,并将产生的新字符串返回。3)public String replaceAll(String regex,String replacement)该方法用字符串replacement的内容替换当前字符串中遇到的所有和字符串regex相一致的子串,并将产生的新字符串返回。【例6.3】String类字符串的常用操作 6.2.2 字符串变量与字符串变量与StringBuffer类类 1 1创建创建StringBufferStringBuffer类对象类对象 StringBuffer类对象表示的是字符串变量,每一个StringBuffer类对象都是可以扩充和修改的字符串变量。以下是常用的StringBuffer类构造函数:(1)public StringBuffer()()(2)public StringBuffer(int length)(3)public StringBuffer(String str)2StringBuffer类对象的常用方法类对象的常用方法 (1)StringBuffer类对象的扩充 StringBuffer类提供两组方法用来扩充StringBuffer对象所包含的字符,分别是:1)public StringBuffer append (Object obj)append方法用于扩充StringBuffer对象所包含的字符,该方法将指定的参数对象转化为字符串后,将其附加在原来的StringBuffer对象之后,并返回新的StringBuffer对象。附加的的参数对象可以是各种数据类型的,如int、char、String、double等。2)public StringBuffer insert(int 插入位置,参数插入位置,参数对对象象类类型,参数型,参数对对象名)象名)该方法将指定的参数对象转化为字符串后,将其插入在原来的StringBuffer对象中指定的位置,并返回新的StringBuffer对象。(2)StringBuffer类对象的长度与容量 一个StringBuffer类对象的长度指的是它包含的字符个数;容量指的是被分配的字符空间的数量。1)public int length()()该方法返回当前StringBuffer类对象包含的字符个数。2)public int capacity()()该方法返回当前StringBuffer类对象分配的字符空间的数量。(3)StringBuffer类对象的修改 public void setCharAt(int index,char ch)该方法将当前StringBuffer对象中的index位置的字符替换为指定的字符ch。(4)字符串的赋值和加法 字符串是在程序中要经常使用的数据类型,在Java编译系统中引入了字符串的赋值和加法操作。【例6.4】反转字符串中的字符6.3 数组数组 数组是一个长度固定的数据结构,它存储多个相同类型的数值。数组直接被Java编程语言所支持,但是无论数组是由原始类型构成,或者带有其它类数据,数组也是一个对象。数组是一个Object类的一个不明显的扩展,所以可以指定一个数组给一个类型定义为Object的变量。6.3.1 数组的创建和初始化数组的创建和初始化 在Java中,数组可以是任何类型的原始类型或类类型,也就是说,数组元素可以是原始类型的量,也可以是某一个类的对象。在Java中,一个数组的创建一般需要以下三个步骤:1 1数组的声明数组的声明 数数组组元素元素类类型型 数数组组名名;数数组组元素元素类类型型 数数组组名;名;2 2创建数组空间创建数组空间 数数组组名名=new 数数组组元素元素类类型型数数组长组长度度;创建数组空间的工作可以和声明数组的工作组合在一起,用一条语句来实现。如:int a;a=new int20;等价于:int a=new int20;3 3初始化数组初始化数组 数组中的各元素是有先后次序的,每个数组元素用数组的名字和它在数组中的位置来表达。在上面创建的数组a中,a0表示数组a中的第一个元素,如a1表示数组a中的第二个元素,依次类推,数组中的最后一个元素为a19。初始化数组就是要使数组中的各个元素有确定的数值。如果数组元素的类型是基本数据类型,由于基本数据类型都有缺省值,数组元素都自动初始化为缺省值,这个步骤可以省略。比如上面的数组中的每一个元素值都是0。对于以某个类的对象为数组元素的数组,初始化每个数组元素是必须的。对于数组有几个需要注意的地方:(1)所有的数组都有一个属性length,这个属性存储了数组元素的个数。(2)Java编程环境会自动检查数组下标是否越界。【例6.5】String类数组的操作 6.3.2 数组的数组数组的数组 Java编程语言中,因为一个数组可被声明为任何类型,所以可以创建数组的数组、数组的数组的数组,等等。【例【例6.66.6】数组的数组数组的数组1 1 【例【例6.76.7】数组的数组数组的数组2 26.3.3 复制数组复制数组 System.arraycopy(from,fromIndex,to,toIndex,count);该方法从数组from的索引fromIndex位置起,复制count个元素到数组to的从索引toIndex位置开始的地方。这里要注意,目标数组必须在调用arraycopy之间分配内存,而且这个内存空间必须足够容纳被复制的数据。【例【例6.86.8】数组的复制数组的复制 6.3.4 数组类数组类Arrays 在“java.util”包中,专门有一个数组类Arrays,该类提供了一些方法用于排序、查找等操作,在编制程序中可以直接使用这些方法。1 1排序排序 在编制程序中可以直接使用类Arrays提供的某个sort方法,来对数组排序。sort方法常见的使用形式如下:public static void sort(Xxx a)该方法用改进的快速排序方法对指定的数组a进行排序,其中数组a是类型为char、byte、short、int、long、float、double或者boolean的一个数组。sort方法还有另外一种常见的形式:public static void sort(Xxx a,int fromIndex,int toIndex)这种形式只对数组a中指定范围内的元素(从afromIndex到atoIndex之间的元素,其中不包含atoIndex)排序。【例【例6.96.9】数组的排序数组的排序 2查找查找 public static int binarySearch (Xxx a,Xxx v)该方法用折半查找算法在指定的数组a查找值为v的元素。其中数组a是类型为char、byte、short、int、long、float、double或者boolean的一个数组,v是与数组a的元素类型相同的值。该方法如果在数组a查找到值为v的元素,则返回该元素的下标;如果没有找到匹配的元素,则返回一个负值r,位置-(r+1)为保持数组有序时值为v的元素应该插入的位置。3填充填充 public static void fill(Xxx a,Xxx v)该方法用指定的指定的值v来填充数组a,执行该方法的结果是:数组a中所有元素的值都变成v。其中数组a是类型为char、byte、short、int、long、float、double或者boolean的一个数组。6.3.5 命令行参数命令行参数 每一个Java Application程序都有一个含有String args参数的main方法。该方法的说明如下:public static void main(String args);这个参数String args表示main方法接收了一个字符串数组,该字符串数组就是从命令行上传递过来的参数。由于Java Application程序可以用命令行来启动,所以命令行参数就成为向Java Application程序传递参数数据的常用而且有效的手段。【例6.10】命令行参数 本章小结 字符是指用单引号括起来单个字符,Java中的字符是指占2个字节的Unicode字符;字符串指的是字符的序列,用双引号括起来的字符的序列都是字符串。有两种类型的字符串:字符串常量和字符串变量。String类用于存储和处理字符串常量;StringBuffer类用于存储和操作字符串变量。数组是一个长度固定的数据结构,它存储多个相同类型的数值。数组元素可以是可以是原始类型的量,也可以是某一个类的对象。所有的数组都有一个属性length,这个属性存储了数组元素的个数。Java编程环境会自动检查数组下标是否越界,在编制程序时一定要保证数组的下标不越界。在JDK中专门提供了一个数组类Arrays,该类提供了用于排序、查找等操作的方法,在编制程序中可以直接使用这些方法。命令行参数是向Java Application程序传递参数数据的常用而且有效的手段。