Java第6章字符串及应用.ppt
《Java第6章字符串及应用.ppt》由会员分享,可在线阅读,更多相关《Java第6章字符串及应用.ppt(80页珍藏版)》请在三一办公上搜索。
1、第6章字符串及应用,内容提要,字符串是字符的序列,它是许多程序设计语言的基本数据结构。有些语言中的字符串是通过字符数组实现的(如C语言),Java语言是通过字符串类实现的。,本章要点,本章主要介绍String类和StringBuilder类、命令行参数和正则表达式,字符串类,Java语言提供了三个字符串类:String类是不变字符串StringBuilder和StringBuffer是可变字符串这三种字符串都是16位的Unicode字符序列,并且这三个类都被声明为final,因此不能被继承。这三个类各有不同的特点,应用于不同场合。,6.1 String类,6.1.1 创建String类对象 6
2、.1.2 字符串类几个常用方法6.1.3 字符串查找6.1.4 字符串与数组之间的转换6.1.5 字符串的解析6.1.6 字符串比较6.1.7 String对象的不变性,6.1.1 创建String类对象,方法一:直接利用字符串字面量创建字符串对象,例如:String s=This is a Java string.;方法二:一般使用String类的构造方法创建一个字符串对象。String类有十多个重载的构造方法,可以生成一个空字符串,也可以由字符或字节数组生成字符串。常用的构造方法如下:,6.1.1 创建String类对象,public String():创建一个空字符串。public St
3、ring(char value):使用字符数组中的字符创建字符串。public String(char value,int offset,int count):使用字符数组中offset为起始下标,count个字符创建一个字符串。public String(byte bytes):使用字节数组中的字符创建字符串。public String(byte bytes,int offset,int count):offset为数组元素起始下标,count为元素个数。使用这些字节创建字符串。,6.1.1 创建String类对象,public String(byte bytes,String charse
4、tName):使用指定的字节数组构造一个新的字符串,新字符串的长度与字符集有关,因此可能与字节数组的长度不同。charsetName为使用的字符集名,如US-ASCII、ISO-8859-1、UTF-8、UTF-16等。如果使用了系统不支持的字符集,将抛出UnsupportedEncodingException异常。public String(String original):使用一个字符串对象创建字符串。public String(StringBuffer buffer):使用StringBuffer对象创建字符串。public String(StringBuilder buffer):使用
5、StringBuilder对象创建字符串。,6.1.1 创建String类对象,下面的例子说明了使用字符串的构造方法创建字符串对象。程序6.1 StringDemo.java程序运行结果为:s1=ABCs2=中国s3=ABCs4=abcde,字符串类几个常用方法,String类定义了许多方法,下面是几个最常用方法。public int length():返回字符串的长度,即字符串包含的字符个数。注意,对含有中文或其他语言符号的字符串,计算长度时,一个符号作为一个字符计数。public char charAt(int index):返回字符串中指定位置的字符,index表示位置,范围为0s.le
6、ngth()-1。public String concat(String str):将调用字符串与参数字符串连接起来,产生一个新的字符串。,字符串类几个常用方法,public String substring(int beginIndex,int endIndex):从字符串的下标beginIndex开始到endIndex结束产生一个子字符串。public String substring(int beginIndex):从字符串的下标beginIndex开始到结束产生一个子字符串。public String replace(char oldChar,char newChar):将字符串中的所
7、有oldChar字符改变为newChar字符,返回一个新的字符串。public String toUpperCase():将字符串转换成大写字母。public String toLowerCase():将字符串转换成小写字母。,字符串类几个常用方法,public String trim():返回去掉了前后空白字符的字符串对象。public boolean isEmpty():返回该字符串是否为空(),如果length()的结果为0,方法返回true,否则返回false。,字符串类几个常用方法,下面程序要求从键盘输入一个字符串,判断该字符串是否是回文串。一个字符串,如果从前向后读和从后向前读都一
8、样,则称该串为回文串。例如,“mom”和“上海海上”都是回文串。,算法思想:对于一个字符串,先判断该字符串的第一个字符和最后一个字符是否相等,如果相等,检查第二个字符和倒数第二个字符是否相等。这个过程一直进行,直到出现不相等的情况或者串中所有字符都检测完毕,当字符串有奇数个字符时,中间的字符不用检查。,字符串类几个常用方法,程序6.2 CheckPalindrome.java,字符串查找,String类提供了从字符串中查找字符和子串的方法,如下所示。public int indexOf(int ch):查找字符ch第一次出现的位置。如果查找不成功则返回-1,下述方法相同。public int
9、indexOf(int ch,int fromIndex):查找字符ch从fromIndex开始第一次出现的位置(在原字符串中的下标)。public int lastIndexOf(int ch):查找字符ch最后一次出现的位置。public int lastIndexOf(int ch,int endIndex):查找字符ch到endIndex为止最后一次出现的位置。,字符串查找,public int indexOf(String str,int fromIndex):查找字符串str从fromIndex开始第一次出现的位置(在原字符串中的下标)。public int indexOf(Str
10、ing str):查找字符串str第一次出现的位置。public int lastIndexOf(String str):查找字符串str最后一次出现的位置public int lastIndexOf(String str,int endIndex):查找字符串str到endIndex为止最后一次出现的位置(在原字符串中的下标)。,字符串查找,程序6.3 StringSearch.java,6.1.4 字符串与数组之间的转换,字符串不是数组,但是字符串能够转换成数组,反之亦然。String类提供了下列方法将字符串转换成数组:public char toCharArray():将字符串中的字符转
11、换为字符数组。public byte getBytes():使用平台默认的字符集将字符串编码成字节序列并将结果存储到字节数组中。,6.1.4 字符串与数组之间的转换,public byte getBytes(String charsetName):使用指定的字符集将字符串编码成字节序列 并将结果存储到字节数组中。该方法抛出java.io.UnsupportedEncodingException异常。public void getChars(int srcBegin,int srcEnd,char dst,int dstBegin):将字符串中从起始位置(srcBegin)到结束位置(srcEn
12、d)之间的字符复制到字符数组dst中,dstBegin为目标数组的起始位置。,6.1.4 字符串与数组之间的转换,下面代码使用toCharArray()方法将字符串转换为字符数组,使用getChars()方法将字符串的一部分复制到字符数组中。String s=new String(This is a Java string.);char chars=s.toCharArray();System.out.println(chars);/This is a Java string.char subs=new char4;s.getChars(10,14,subs,0);System.out.pri
13、ntln(subs);/Java,6.1.5 字符串的解析,String类提供了一个split()方法,它实现将一个字符串分解成子字符串或令牌(Token)。该方法使用正则表达式指定分隔符,该方法 有下面两种格式:public String split(String regex,int n)参数regex表示正则表达式,n表示模式应用的次数。如果n的值为0,则模式将应用尽可能多的次数,末尾的空字符串被丢弃。如果n的值大于0,则模式至多被应用n-1次,结果数组的长度不大于n,数组的最后一项将包含除最后一个匹配的分隔符外的所有输入内容。如果n的值小于0,则模式将应用尽可能多的次数。,6.1.5 字
14、符串的解析,public String split(String regex):与上述方法n为0的情况相同。public boolean matches(String regex):返回字符串是否与给定的正则表达式匹配。在split()方法中指定的正则表达式“,.”的含义是使用空格、逗号或句点为分隔符解析字符串。关于正则表达式请参考6.4节。,6.1.5 字符串的解析,程序6.4 SplitDemo.java public class SplitDemo public static void main(Stringargs)String ss=one little,two little,thr
15、ee little.;String str=ss.split(,.);for(String s:str)System.out.println(s);System.out.println(ss.matches(.*little.*);/输出true,6.1.6 字符串比较,在Java程序中,经常需要比较两个字符串是否相等、或比较两个字符串的大小,下面介绍如何比较字符串。1.字符串相等的比较要比较两个字符串是否相等,你可能想到用“=”号来比较,如下代码所示:String s1=new String(Hello);String s2=new String(Hello);System.out.prin
16、tln(s1=s2);然而,上面代码的输出结果为false。这是因为在Java语言中用“=”比较引用类型的数据(对象)时,比较的是引用(地址)是否相等。,6.1.6 字符串比较,只有两个引用指向同一个对象时,结果才为true。上面使用构造方法创建的两个对象是不同的,因此s1和s2的引用是不同的,如图6.1(a)所示。,6.1.6 字符串比较,再看下面一段代码:String s1=Hello;String s2=Hello;System.out.println(s1=s2);这次输出结果为true。这两段代码的不同之处就在于创建s1、s2对象的代码不同。这里的s1、s2是用字符串常量创建的两个对
17、象。字符串常量存储和对象存储不同,字符串常量是存储在常量池中,对内容相同的字符串常量在常量池中只有一个副本,因此s1和s2是指向同一个对象,如图6.1(b)所示。,6.1.6 字符串比较,由上面可以看到,“=”用来比较两个引用值是否相等,如果要比较两个对象的内容是否相等,可以使用String类的equals()方法或equalsIgnoreCase()方法。public boolean equals(String anotherString)public boolean equalsIgnoreCase(String anotherString)使用第二个方法比较时将忽略大小写。对于上面两种情
18、况,表达式:s1.equals(s2)的结果都为true,因为s1、s2的内容相等。,6.1.6 字符串比较,2.字符串大小的比较 使用equals()方法只能比较字符串的相等与否,要比较大小,可以使用String类的compareTo()方法或compareToIgnoreCase()方法,格式为:public int compareTo(String anotherString)public int compareToIgnoreCase(String anotherString),第二个方法比较时忽略大小写。该方法将当前字符串与参数字符串比较,并返回一个整数值。,6.1.6 字符串比较,
19、字符串比较使用字符的Unicode码值进行比较。若当前字符串小于参数字符串,方法返回值小于0,若当前字符串大于参数字符串,方法返回值大于0,若当前字符串等于参数字符串,方法返回值等于0。例如,表达式“ABC.compareTo(ABD)的返回值为-1。注意:字符串不能使用、=、=进行比较,但可以使用!=比较。下面的例子使用起泡排序法,将给出的字符串数组按由小到大的顺序输出。,6.1.6 字符串比较,程序6.5 StringSort.java,程序输出结果为:America China England France Russia,6.1.6 字符串比较,String类还提供了下面两个方法判断一个
20、字符串是否以某个字符串开头或结尾。public boolean startsWith(String prefix):返回字符串是否以某个字符串开始。public boolean endsWith(String suffix):返回字符串是否以某个字符串结尾。另外,String类还提供了下面两个方法比较两个字符串指定区域的字符串是否相等。public boolean regionMatches(int toffset,String other,int offset,int len)public boolean regionMatches(boolean ignoreCase,int toffse
21、t,String other,int offset,int len),6.1.7 String对象的不变性,在Java程序中一旦创建一个String对象,就不能对其内容进行改变,因此说Java的String对象是不可变的字符串。有些方法看起来是修改字符串,但字符串修改后产生了另一个字符串,这些方法对原字符串没有任何影响,原字符串永远不会改变。请看下面的例子。,6.1.7 String对象的不变性,程序6.6 ChangeString.javapublic class ChangeStringpublic static void main(String args)String s=new Str
22、ing(Hello,world);s.replace(o,A);/s的值并没有改变 s=s.substring(0,6).concat(Java);s.toUpperCase();/s的值并没有改变 System.out.println(s);程序运行结果为:Hello,Java,6.2 命令行参数,Java应用程序从main()方法开始执行,main()方法的声明格式为:public static void main(String args)参数String args称为命令行参数,它是一个字符串数组,该参数是在程序运行时通过命令行传递给main()方法。下面程序要求从命令行为程序传递3个参
23、数,在main()方法中通过args0、args1、args2输出这3个参数的值。,6.2 命令行参数,程序6.7 HelloProgram.javapublic class HelloProgram public static void main(String args)System.out.println(args0+args1+args2);运行该程序需要通过命令行为程序传递3个参数,例如D:studyjava HelloProgram How are you!程序运行结果为:How are you!,6.2 命令行参数,Java解释器根据传递的参数个数确定数组args的长度,如果给出的
24、参数少于引用的元素,则抛出ArrayIndexOutOfBoundsException运行时异常,例如:D:studyjava HelloProgram How are 上述命令中只提供了两个命令行参数,创建的args数组长度为2,而程序中访问了第3个元素(args2),故产生运行时异常。,6.2 命令行参数,命令行参数传递的是字符串,若将其作为数值处理,需要进行转换。下面的程序要求从命令行输入3个整数,输出最大值和最小值。程序6.8 ThreeInteger.javapublic class ThreeInteger public static void main(String args)i
25、nt max,min,a,b,c;a=Integer.parseInt(args0);/将字符串转换为整数 b=Integer.parseInt(args1);,6.2 命令行参数,c=Integer.parseInt(args2);max=Math.max(Math.max(a,b),c);/求a,b,c的最大值 min=Math.min(Math.min(a,b),c);System.out.println(max=+max);System.out.println(min=+min);运行该程序需要在命令行给出参数,如下所示:D:studyjava ThreeInteger 23-234
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 字符串 应用

链接地址:https://www.31ppt.com/p-6510071.html