
第9章字符串和文本I/OLiang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 1 第9章 字符串和文本I/O

动因我们经常会遇到涉及字符串处理和文件输入/输出的问题。假设你需要编写一个程序,该程序用一个新字替换文件中所有出现的某个字。你该如何实现这个功能呢?本章介绍字符串和文本文件,它们可以解决此类问题Liang.Introduction to JavaProgramming.EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 2 动 因 我们经常会遇到涉及字符串处理和文件输入/输 出的问题。假设你需要编写一个程序,该程序 用一个新字替换文件中所有出现的某个字。你 该如何实现这个功能呢?本章介绍字符串和文 本文件,它们可以解决此类问题

学习目标(第9.2节)使用String类处理定长的字符串使用Character类处理单个字符(第9.3节)。使用StringBuilder/StringBuffer类处理可变长字符串(第9.4节)。区别String、StringBuilder和StringBuffer类(第9.2-9.4节)。学习如何从命令行传参数给main方法(第9.5节)使用File类获取文件的属性、删除和重命名文件(第9.6节)。使用PrintWriter类向文件写数据(第9.7.1节)(第9.7.2节)使用Scanner类从文件读取数据(GUI)使用对话框打开文件(第9.8节)Liang,Introduction to Java Programming,Eighth Edition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 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节)

字符串类string创建一个字符串对象:String message = "welcome to Java";String message = new String("Welcome to Java");-string s=new String();获取字符串长度和在一个字符串中获取某个单个字符。字符串连接(concat)子串(substring(index)、substring(start, end))比较(equals、compareTo)字符串转换在一个字符串中找出一个字符或一个子串字符串和数组之间的转换将字符和数值转换成字符串Liang,Introduction toJava Programming.EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 4 字符串类String 创建一个字符串对象: – String message = "Welcome to Java“; – String message = new String("Welcome to Java“); – String s = new String(); 获取字符串长度和在一个字符串中获取某个单个字符。 字符串连接(concat) 子串(substring(index)、substring(start, end)) 比较(equals、compareTo) 字符串转换 在一个字符串中找出一个字符或一个子串 字符串和数组之间的转换 将字符和数值转换成字符串

创建字符串对象String newString = new String(stringLiteral))String message = new String("Welcome to Java")因为字符串使用非常频繁,所以Java提供一种简化的方法来初始化一个字符串对象:String message = "Welcome to Java":Liang,Introduction to JavaProgramming,EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 5 创建字符串对象 String newString = new String(stringLiteral); String message = new String("Welcome to Java"); 因为字符串使用非常频繁,所以Java提供一种简 化的方法来初始化一个字符串对象: String message = "Welcome to Java";

字符串是不可变的String对象是不可变的;它的内容是不能改变的下列代码会改变字符串的内容吗?String s ="Java":S ="HTML":Liang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 6 字符串是不可变的 String对象是不可变的;它的内容是不能改变的。 下列代码会改变字符串的内容吗? String s = "Java"; s = "HTML";

动画跟踪代码String s ="Java"S = "HTML":执行语句“string后"Java";"S: StringStringobjectfor"Java内容不能改变Liang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 7 跟踪代码 String s = "Java"; s = "HTML"; : String String object for "Java" s 执行语句“String s = "Java";”后 After executing s = "HTML"; : String String object for "Java" : String String object for "HTML" 内容不能改变 This string object is now unreferenced s 动 画

动画跟踪代码String s = "Java";S="HTML"执行语句“s="HTML"”后;String这个字符串对象现在未被引用Stringobjectfor"Java"StringString objectfor"HTML"Liang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 8 跟踪代码 String s = "Java"; s = "HTML"; : String String object for "Java" s 执行“String s = "Java"; 执行语句“s = "HTML"”后; : String String object for "Java" : String String object for "HTML" Contents cannot be changed 这个字符串对象现 在未被引用 now unreferenced s 动 画

限定字符串但同时因为字符串在程序设计中是不可变的,又会频繁地使用,所以Java虚拟机为了提高效率和节约内存,对具有相同字符串序列的字符串直接量使用同一个实例。这样的实例被称为限定的(interned)。例如:下面的语句Liang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.Allrightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 9 限定字符串 因为字符串在程序设计中是不可变的,但同时 又会频繁地使用,所以Java虚拟机为了提高效 率和节约内存,对具有相同字符串序列的字符 串直接量使用同一个实例。这样的实例被称为 限定的(interned)。例如:下面的语句

举例s"welcome to Java"Strings1: Strings3FStrings2=new string("welcometo Java");“Welcometo Java”的限定字符串对象"welcome to Java"strings3=1S2is+(s1System.out-println("sls2)); s2→=StringS3is+(s1s3));System.out.println("sl-=“Welcome to Java”的字符串对象如果使用new操作符,就会创建一人程序结果显示新的对象。sl == s 是 false如果使用字符串初始化方法,如果sl == s3 是 true限定对象已经被创建则没有新对象被创建,Liang,Introduction toJava Programming,EighthEdition,(c)2011Pearson Education,Inc.All10rightsreserved.0132130807
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved. 0132130807 10 举 例 程序结果显示 s1 == s 是 false s1 == s3 是 true 如果使用new操作符,就会创建一个 新的对象。 如果使用字符串初始化方法,如果 限定对象已经被创建则没有新对象 被创建。 String s1 = "Welcome to Java"; String s2 = new String("Welcome to Java") ; String s3 = "Welcome to Java"; System.out.println("s1 == s2 is " + (s1 == s2)); System.out.println("s1 == s3 is " + (s1 == s3)); : String “Welcome to Java”的 限定字符串对象 : String “Welcome to Java”的 字符串对象 s1 s2 s3