![java语言程序设计基础篇8e中文ch09slide_第1页](http://file4.renrendoc.com/view/59db0b74e6280652205576a46a52b1a0/59db0b74e6280652205576a46a52b1a01.gif)
![java语言程序设计基础篇8e中文ch09slide_第2页](http://file4.renrendoc.com/view/59db0b74e6280652205576a46a52b1a0/59db0b74e6280652205576a46a52b1a02.gif)
![java语言程序设计基础篇8e中文ch09slide_第3页](http://file4.renrendoc.com/view/59db0b74e6280652205576a46a52b1a0/59db0b74e6280652205576a46a52b1a03.gif)
![java语言程序设计基础篇8e中文ch09slide_第4页](http://file4.renrendoc.com/view/59db0b74e6280652205576a46a52b1a0/59db0b74e6280652205576a46a52b1a04.gif)
![java语言程序设计基础篇8e中文ch09slide_第5页](http://file4.renrendoc.com/view/59db0b74e6280652205576a46a52b1a0/59db0b74e6280652205576a46a52b1a05.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第9章字符串和文本I/O2动因我们经常会遇到涉及字符串处理和文件输入/输出的问题。假设你需要编写一个程序,该程序用一个新字替换文件中所有出现的某个字。你该如何实现这个功能呢?本章介绍字符串和文本文件,它们可以解决此类问题。3学习目标使用String类处理定长的字符串(第9.2节)。使用Character类处理单个字符(第9.3节)。使用StringBuilder/StringBuffer类处理可变长字符串
(第9.4节)。区别String、StringBuilder和StringBuffer类
(第9.2-9.4节)。学习如何从命令行传参数给main方法(第9.5节)。使用File类获取文件的属性、删除和重命名文件(第9.6节)。使用PrintWriter类向文件写数据(第9.7.1节)。使用Scanner类从文件读取数据(第9.7.2节)。(GUI)使用对话框打开文件(第9.8节)。4字符串类String创建一个字符串对象:Stringmessage="etoJava“;Stringmessage=newString("etoJava“);Strings=newString();获取字符串长度和在一个字符串中获取某个单个字符。字符串连接(concat)子串(substring(index)、substring(start,end))比较(equals、compareTo)字符串转换在一个字符串中找出一个字符或一个子串字符串和数组之间的转换将字符和数值转换成字符串5创建字符串对象StringnewString=newString(stringLiteral);
Stringmessage=newString("etoJava");因为字符串使用非常频繁,所以Java提供一种简化的方法来初始化一个字符串对象:Stringmessage="etoJava";6字符串是不可变的String对象是不可变的;它的内容是不能改变的。下列代码会改变字符串的内容吗?Strings="Java";s="HTML";7跟踪代码
Strings="Java";s="HTML";动画8跟踪代码
Strings="Java";s="HTML";动画9限定字符串因为字符串在程序设计中是不可变的,但同时又会频繁地使用,所以Java虚拟机为了提高效率和节约内存,对具有相同字符串序列的字符串直接量使用同一个实例。这样的实例被称为限定的(interned)。例如:下面的语句10举例程序结果显示
s1==s是falses1==s3是true如果使用new操作符,就会创建一个新的对象。如果使用字符串初始化方法,如果限定对象已经被创建则没有新对象被创建。11跟踪代码动画12跟踪代码13跟踪代码14字符串比较15字符串比较equals Strings1=newString("e“); Strings2="e";
if(s1.equals(s2)){//s1ands2havethesamecontents}
if(s1==s2){//s1ands2havethesamereference}16字符串比较(续)compareTo(Objectobject) Strings1=newString("e“); Strings2="e";
if(pareTo(s2)>0){//s1isgreaterthans2}elseif(pareTo(s2)==0){//s1ands2havethesamecontents}else//s1islessthans217字符串长度、字符
以及组合字符串18获取字符串长度使用length()方法获取字符串的长度:message="e";message.length()(返回7)19在字符串中获取单个字符不能使用message[0]使用message.charAt(index)下标index从0开始20字符串连接Strings3=s1.concat(s2);Strings3=s1+s2;s1+s2+s3+s4+s5等价于(((s1.concat(s2)).concat(s3)).concat(s4)).concat(s5);21获取子串22提取子串可以使用charAt方法从字符串中获取单个字符,你也可以使用String类中的substring方法从字符串中提取子串。Strings1="etoJava";Strings2=s1.substring(0,11)+"HTML";23字符串的转换、替换和分割24举例“e”.toLowerCase()返回一个新字符串e。“e”.toUpperCase()返回一个新字符串WELCOME。“e”.trim()返回一个新字符串e。“e”.replace(‘e’,‘A’)返回一个新字符串A。“e”.replaceFirst(“e”,“AB”)返回一个新字符串e。“e”.replace(“e”,“AB”)返回一个新字符串AB。“e”.replace(“el”,“AB”)返回一个新字符串e。25分割字符String[]tokens="Java#HTML#Perl".split("#",0);for(inti=0;i<tokens.length;i++)System.out.print(tokens[i]+"");JavaHTMLPerl显示26依照模式匹配、替换和分割可以通过指定某个模式来匹配、替换或分割一个字符串。这是一种非常有用且功能强大的特性,通常称之为正则表达式(regularexpression)。正则表达式对起步阶段的学生讲可能会比较复杂。基于这个原因,本节只使用两个简单的模式。若要进行进一步的学习,请参照补充材料III.F“正则表达式”。"Java".matches("Java");"Java".equals("Java");"Javaisfun".matches("Java.*");"Javaiscool".matches("Java.*");27依照模式匹配、替换和分隔方法replaceAll、replaceFirst和split也可以和正则表达式结合在一起使用。例如:下面的语句中用字符串NNN替换“a+b$#c”中的$、+或者#,然后返回一个新字符串。Strings="a+b$#c".replaceAll("[$+#]","NNN");System.out.println(s);这里的正则表达式[$+#]表示能够匹配$、+或者#模式。所以,输出是aNNNbNNNNNNc。
28依照模式匹配、替换和分隔下面的语句将字符串分隔为由标点符号分隔开的字符串数组。String[]tokens="Java,C?C#,C++".split("[.,:;?]");
for(inti=0;i<tokens.length;i++)System.out.println(tokens[i]);29找出字符串中的
某个字符或者某个子串30找出字符串中的
某个字符或者某个子串“etoJava”.indexOf(‘W’)返回0。“etoJava”.indexOf(‘x’)返回-1。“etoJava”.indexOf(‘o’,5)返回9。“etoJava”.indexOf(“come”)返回3。“etoJava”.indexOf(“Java”,5)返回11。“etoJava”.indexOf(“java”,5)返回-1。“etoJava”.lastIndexOf(‘a’)返回14。
31将字符和数字转换成字符串String类提供了几个静态的valueOf方法能够将字符、字符数组和数值转换成字符串。这些方法都有同样的名字valueOf,但有不同类型的参数类型:char、char[]、double、long、int和float型。例如:为了将一个double值转换为一个字符串,使用String.valueOf(5.44)。返回值是一个由字符“5”、“.”、“4”和“4”构成的字符串。32问题:找出回文串目的:检测一个字符串是否是回文串:从前向后和从后向前读都是同一个字符串的字符串。CheckPalindromeRun33Character类34举例CharactercharObject=newCharacter('b');pareTo(newCharacter('a'))返回1pareTo(newCharacter('b'))返回0pareTo(newCharacter('c'))返回-1pareTo(newCharacter('d')返回–2charObject.equals(newCharacter('b'))返回truecharObject.equals(newCharacter('d'))返回false35问题:统计字符串中
每个字母的出现次数这个例子给出一个程序,统计在忽略字母大小写的情况下,字符串中每个字母出现的次数。CountEachLetterRun36StringBuilder/StringBuffer类StringBuilder/StringBuffer类是可以替代String类的另一种处理字符串的解决方案。一般来说,只要使用字符串的地方,都可以使用StringBuilder/StringBuffer类。StringBuilder/StringBuffer类比String类更灵活。你是可以给一个StringBuilder或StringBuffer中添加、插入或追加新的内容,但是String对象一旦创建,它的值就确定了。37StringBuilder的构造方法38修改生成器中的字符串39举例stringBuilder.append("Java");stringBuilder.insert(11,"HTMLand");stringBuilder.delete(8,11)将生成器变为eJava。stringBuilder.deleteCharAt(8)将生成器变为eoJava。stringBuilder.reverse()将生成器变为avaJotemocleW。stringBuilder.replace(11,15,“HTML”)将生成器变为etoHTML。stringBuilder.setCharAt(0,‘w’)将生成器变为etoJava。40toString、capacity、length、setLength和charAt方法41问题:忽略既非字母又非数字的
字符来判断回文串这个例子给出一个程序,检测一个字符串在忽略掉非字母和非数字的字符后,它是否是一个回文串。PalindromeIgnoreNonAlphanumericRun42main方法也就是一个普通的方法你可以通过传递实参来调用一个普通的方法。那能给main传递参数吗?当然可以。例如:在类B中的main方法是能被类A中的方法调用的,如下所示:43命名行参数classTestMain{ publicstaticvoidmain(String[]args){...}}javaTestMainarg0arg1arg2...argn44处理命名行参数在main方法中,从
args[0]、args[1]、...、args[n]中获取参数,它们分别对应于命名行中的arg0、arg1、...、argn。45问题:计算器目的:编写一个程序,完成整数的算术运算。该程序接收三个参数:一个操作符和两个整数。CalculatorjavaCalculator2+3javaCalculator2-3RunjavaCalculator2/3javaCalculator2“*”346正则表达式正则表达式是一个字符串,它描述了匹配一组字符串的模式。正则表达式是一个功能强大的字符串操作工具。可以使用正则表达式匹配、替换和分割字符串。配套网站47匹配字符串"Java".matches("Java");"Java".equals("Java");"Javaisfun".matches("Java.*")"Javaiscool".matches("Java.*")"Javaispowerful".matches("Java.*")配套网站48正则表达式语法配套网站49替换和分割字符串配套网站50举例Strings="JavaJavaJava".replaceAll("v\\w","wi");Strings="JavaJavaJava".replaceFirst("v\\w","wi");String[]s="Java1HTML2Perl".split("\\d");配套网站51File类File类特意提供了一种抽象,这种抽象是指以不依赖机器的方式来处理很多文件和路径名依赖机器的复杂问题。文件名是一个字符串。File类是文件及其目录路径的一个包装类。52获取文件属性和操作文件53问题:获取文件属性TestFi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高压液压柱塞泵马达项目发展计划
- 2025年度新能源材料研发保密与共享合同
- 2025年度绿色建筑项目财产赠与合同
- 2025年(半)干式烟气脱硫成套设备项目建议书
- 2025年度出境领队带团操作规范合同范本
- 水务生态保护规划计划
- 2025年食品分离机械项目合作计划书
- 持续改进教学工作的机制计划
- 高危行业的安全防控计划
- 合理安排急诊排班的重要性计划
- 【历史】唐朝建立与“贞观之治”课件-2024~2025学年统编版七年级历史下册
- 2024化工园区危险品运输车辆停车场建设规范
- 05G359-3 悬挂运输设备轨道(适用于一般混凝土梁)
- 2023年山东科技职业学院单招综合素质考试笔试模拟试题及答案解析
- 警察行政法课件
- 数学与生活小报
- 挖掘数学专业课程的思政元素-以空间解析几何为例
- 人力资源管理手册(全集)
- 儿科学教学课件肾病综合征
- 2023高中物理步步高大一轮 第四章 专题强化七 圆周运动的临界问题
- 田字格模版内容
评论
0/150
提交评论