收藏 分享(赏)

Java语言程序设计-基础篇-中文ppt-第九章.ppt

上传人:guanlirenli 文档编号:3206911 上传时间:2018-10-07 格式:PPT 页数:58 大小:732KB
下载 相关 举报
Java语言程序设计-基础篇-中文ppt-第九章.ppt_第1页
第1页 / 共58页
Java语言程序设计-基础篇-中文ppt-第九章.ppt_第2页
第2页 / 共58页
Java语言程序设计-基础篇-中文ppt-第九章.ppt_第3页
第3页 / 共58页
Java语言程序设计-基础篇-中文ppt-第九章.ppt_第4页
第4页 / 共58页
Java语言程序设计-基础篇-中文ppt-第九章.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

1、1,第9章 字符串和文本I/O,2,动 因,我们经常会遇到涉及字符串处理和文件输入/输出的问题。假设你需要编写一个程序,该程序用一个新字替换文件中所有出现的某个字。你该如何实现这个功能呢?本章介绍字符串和文本文件,它们可以解决此类问题。,3,学习目标,使用String类处理定长的字符串(第9.2节)。 使用Character类处理单个字符(第9.3节)。 使用StringBuilder/StringBuffer类处理可变长字符串 (第9.4节)。 区别String、StringBuilder和StringBuffer类 (第9.2-9.4节)。 学习如何从命令行传参数给main方法(第9.5节

2、)。 使用File类获取文件的属性、删除和重命名文件(第9.6节)。 使用PrintWriter类向文件写数据(第9.7.1节)。 使用Scanner类从文件读取数据(第9.7.2节)。 (GUI)使用对话框打开文件(第9.8节)。,4,字符串类String,创建一个字符串对象: String message = “Welcome to Java“; String message = new String(“Welcome to Java“); String s = new String(); 获取字符串长度和在一个字符串中获取某个单个字符。 字符串连接(concat) 子串(substrin

3、g(index)、substring(start, end)) 比较(equals、compareTo) 字符串转换 在一个字符串中找出一个字符或一个子串 字符串和数组之间的转换 将字符和数值转换成字符串,5,创建字符串对象,String newString = new String(stringLiteral);String message = new String(“Welcome to Java“);因为字符串使用非常频繁,所以Java提供一种简化的方法来初始化一个字符串对象:String message = “Welcome to Java“;,6,字符串是不可变的,String对象是

4、不可变的;它的内容是不能改变的。下列代码会改变字符串的内容吗?String s = “Java“;s = “HTML“;,7,跟踪代码,String s = “Java“;s = “HTML“;,动 画,8,跟踪代码,String s = “Java“;s = “HTML“;,动 画,9,限定字符串,因为字符串在程序设计中是不可变的,但同时又会频繁地使用,所以Java虚拟机为了提高效率和节约内存,对具有相同字符串序列的字符串直接量使用同一个实例。这样的实例被称为限定的(interned)。例如:下面的语句,10,举 例,程序结果显示s1 = s 是 false s1 = s3 是 true,如

5、果使用new操作符,就会创建一个新的对象。 如果使用字符串初始化方法,如果限定对象已经被创建则没有新对象被创建。,11,跟踪代码,动 画,12,跟踪代码,13,跟踪代码,14,字符串比较,15,字符串比较,equalsString s1 = new String(“Welcome“);String s2 = “welcome“;if (s1.equals(s2) / s1 and s2 have the same contents if (s1 = s2) / s1 and s2 have the same reference ,16,字符串比较(续),compareTo(Object obj

6、ect)String s1 = new String(“Welcome“);String s2 = “welcome“;if (pareTo(s2) 0) / s1 is greater than s2 else if (pareTo(s2) = 0) / s1 and s2 have the same contents else / s1 is less than s2,17,字符串长度、字符 以及组合字符串,18,获取字符串长度,使用length()方法获取字符串的长度:message = “Welcome“; message.length() (返回7),19,在字符串中获取单个字符,不

7、能使用message0 使用message.charAt(index) 下标index从0开始,20,字符串连接,String s3 = s1.concat(s2);String s3 = s1 + s2;s1 + s2 + s3 + s4 + s5 等价于(s1.concat(s2).concat(s3).concat(s4).concat(s5);,21,获取子串,22,提取子串,可以使用charAt方法从字符串中获取单个字符,你也可以使用String类中的substring方法从字符串中提取子串。String s1 = “Welcome to Java“; String s2 = s1.

8、substring(0, 11) + “HTML“;,23,字符串的转换、替换和分割,24,举 例,“Welcome”.toLowerCase() 返回一个新字符串welcome。 “Welcome”.toUpperCase()返回一个新字符串WELCOME。 “ Welcome ”.trim()返回一个新字符串Welcome。 “Welcome”.replace(e, A)返回一个新字符串WAlcomA。 “Welcome”.replaceFirst(“e”, “AB”)返回一个新字符串WABlcome。 “Welcome”.replace(“e”, “AB”)返回一个新字符串WABlcom

9、AB。 “Welcome”.replace(“el”, “AB”)返回一个新字符串WABlcome。,25,分割字符,String tokens = “Java#HTML#Perl“.split(“#“, 0); for (int i = 0; i tokens.length; i+) System.out.print(tokensi + “ “);,Java HTML Perl,显示,26,依照模式匹配、替换和分割,可以通过指定某个模式来匹配、替换或分割一个字符串。这是一种非常有用且功能强大的特性,通常称之为正则表达式(regular expression)。正则表达式对起步阶段的学生讲可能

10、会比较复杂。基于这个原因,本节只使用两个简单的模式。若要进行进一步的学习,请参照补充材料III.F“正则表达式”。,“Java“.matches(“Java“); “Java“.equals(“Java“);,“Java is fun“.matches(“Java.*“); “Java is cool“.matches(“Java.*“);,27,依照模式匹配、替换和分隔,方法replaceAll、replaceFirst和split也可以和正则表达式结合在一起使用。例如:下面的语句中用字符串NNN替换“a+b$#c”中的$、+或者#,然后返回一个新字符串。String s = “a+b$#c

11、“.replaceAll(“$+#“, “NNN“); System.out.println(s);这里的正则表达式$+#表示能够匹配$、+或者#模式。所以,输出是aNNNbNNNNNNc。,28,依照模式匹配、替换和分隔,下面的语句将字符串分隔为由标点符号分隔开的字符串数组。String tokens = “Java,C?C#,C+“.split(“.,:;?“);for (int i = 0; i tokens.length; i+)System.out.println(tokensi);,29,找出字符串中的 某个字符或者某个子串,30,找出字符串中的 某个字符或者某个子串,“Welco

12、me to Java”.indexOf(W)返回0。 “Welcome to Java”.indexOf(x) 返回-1。 “Welcome to Java”.indexOf(o, 5) 返回9。 “Welcome to Java”.indexOf(“come”)返回3。 “Welcome to Java”.indexOf(“Java”, 5)返回11。 “Welcome to Java”.indexOf(“java”, 5) 返回-1。 “Welcome to Java”.lastIndexOf(a) 返回14。,31,将字符和数字转换成字符串,String类提供了几个静态的valueOf方

13、法能够将字符、字符数组和数值转换成字符串。这些方法都有同样的名字valueOf,但有不同类型的参数类型:char、char、double、long、int和float型。例如:为了将一个double值转换为一个字符串,使用String.valueOf(5.44)。返回值是一个由字符 “5 ”、“.”、“4”和“4”构成的字符串。,32,问题:找出回文串,目的:检测一个字符串是否是回文串:从前向后和从后向前读都是同一个字符串的字符串。,CheckPalindrome,Run,33,Character类,34,举 例,Character charObject = new Character(b);

14、charOpareTo(new Character(a) 返回 1 charOpareTo(new Character(b) 返回 0 charOpareTo(new Character(c) 返回 -1 charOpareTo(new Character(d) 返回 2 charObject.equals(new Character(b) 返回 true charObject.equals(new Character(d) 返回 false,35,问题:统计字符串中 每个字母的出现次数,这个例子给出一个程序,统计在忽略字母大小写的情况下,字符串中每个字母出现的次数。,CountEachLet

15、ter,Run,36,StringBuilder/StringBuffer类,StringBuilder/StringBuffer类是可以替代String类的另一种处理字符串的解决方案。一般来说,只要使用字符串的地方,都可以使用StringBuilder/StringBuffer类。 StringBuilder/StringBuffer类比String类更灵活。你是可以给一个StringBuilder或StringBuffer中添加、插入或追加新的内容,但是String对象一旦创建,它的值就确定了。,37,StringBuilder的构造方法,38,修改生成器中的字符串,39,举 例,stri

16、ngBuilder.append(“Java“); stringBuilder.insert(11, “HTML and “); stringBuilder.delete(8, 11) 将生成器变为Welcome Java。 stringBuilder.deleteCharAt(8)将生成器变为Welcome o Java。 stringBuilder.reverse()将生成器变为avaJ ot emocleW。 stringBuilder.replace(11, 15, “HTML”) 将生成器变为Welcome to HTML。 stringBuilder.setCharAt(0, w)

17、将生成器变为welcome to Java。,40,toString、capacity、length、setLength和charAt方法,41,问题:忽略既非字母又非数字的 字符来判断回文串,这个例子给出一个程序,检测一个字符串在忽略掉非字母和非数字的字符后,它是否是一个回文串。,PalindromeIgnoreNonAlphanumeric,Run,42,main方法也就是一个普通的方法,你可以通过传递实参来调用一个普通的方法。那能给main传递参数吗?当然可以。例如:在类B中的main方法是能被类A中的方法调用的,如下所示:,43,命名行参数,class TestMain public

18、static void main(String args) . java TestMain arg0 arg1 arg2 . argn,44,处理命名行参数,在main方法中,从 args0、args1、.、argsn中获取参数,它们分别对应于命名行中的arg0、arg1、.、argn。,45,问题:计算器,目的:编写一个程序,完成整数的算术运算。该程序接收三个参数:一个操作符和两个整数。,Calculator,java Calculator 2 + 3,java Calculator 2 - 3,Run,java Calculator 2 / 3,java Calculator 2 “*”

19、3,46,正则表达式,正则表达式是一个字符串,它描述了匹配一组字符串的模式。正则表达式是一个功能强大的字符串操作工具。可以使用正则表达式匹配、替换和分割字符串。,配套网站,47,匹配字符串,“Java“.matches(“Java“); “Java“.equals(“Java“);,“Java is fun“.matches(“Java.*“) “Java is cool“.matches(“Java.*“) “Java is powerful“.matches(“Java.*“),配套网站,48,正则表达式语法,配套网站,49,替换和分割字符串,配套网站,50,举 例,String s =

20、“Java Java Java“.replaceAll(“vw“, “wi“) ;,String s = “Java Java Java“.replaceFirst(“vw“, “wi“) ;,String s = “Java1HTML2Perl“.split(“d“);,配套网站,51,File类,File类特意提供了一种抽象,这种抽象是指以不依赖机器的方式来处理很多文件和路径名依赖机器的复杂问题。文件名是一个字符串。File类是文件及其目录路径的一个包装类。,52,获取文件属性和操作文件,53,问题:获取文件属性,TestFileClass,Run,目的:编写程序来演示如何以独立于平台的方

21、式创建一个File对象,以及如何使用File类中的方法获取它的属性。图16.1给出该程序在Windows下运行该程序的一个示例,而图16.2给出该程序在Unix下运行该程序的一个示例。,54,文本I/O,File对象封装了文件或路径的属性,但是它既不包括从文件读数据的方法,也不包括向文件写数据的方法。为了完成I/O操作,需要使用恰当的Java I/O类创建对象。这些对象包含从(向)文件读(写)数据的方法。本节介绍如何使用Scanner类和PrintWriter类从(向)文本文件读(写)字符串和数值。,55,使用PrintWriter写数据,WriteData,Run,56,使用Scanner读

22、数据,ReadData,Run,57,问题:替换文本,编写一个名为ReplaceText的类,它用一个新字符串替换文本文件中所有出现某个字符串的地方。文件名和字符串都作为命令行参数传递,如下所示: java ReplaceText sourceFile targetFile oldString newString 例如:调用 java ReplaceText FormatString.java t.txt StringBuilder StringBuffer 就会用StringBuffer替换FormatString.java中所有出现的StringBuilder,然后将新文件保存在t.txt中。,ReplaceText,Run,58,(GUI)文件对话框,ReadFileUsingJFileChooser,Run,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报