java语言程序设计8_第1页
java语言程序设计8_第2页
java语言程序设计8_第3页
java语言程序设计8_第4页
java语言程序设计8_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、语言程序设计 1第八章 字符串和文本I/O学习目标使用String类处理固定的字符串使用Character类处理单个字符使用StringBuilder/StringBuffer类处理可变字符串了解类String、StringBuffer和StringBuffer的区别学会如何将字符串通过命令行传递给main方法使用File类获得文件的属性、删除和重命名文件使用PrintWriter类向文件写数据使用Scanner类从文件读数据2字符串类String构造一个字符串由于字符串使用频繁,所以Java提供了创建字符串的快速初始化方法:例:String message1 = Hello World;St

2、ring message2 = new String(Hello World);String message3 = ;String message4 = new String();String stringRefVal = new String(stringLiteral);String stringRefVal = some string;3String对象是永久的(Immutable)String对象是永久的,它的内容不能改变下面的代码能够改变字符串的内容吗:String str = Hello;str = World;:StringHellostr:StringHellostr:Stri

3、ngWorld可以看到,在执行 str = World 时,会产生一个新的字符串对象。4String类有15 个构造方法65 个方法详细说明见 JDK 文档5字符串长度使用 length() 方法得到字符串的长度:由于Java中字符串是用 Unicode 存储的,因此 length() 得到的是 Unicode 字符的个数不管是中文、英文字符,每个字符长度都是 1注意:String 的 length() 是方法Array 的 length 不是方法String str1 = Long time no see;System.out.println(str1.length(); / 输出 16St

4、ring str2 = 西安电子科技大学;System.out.println(str2.length(); / 输出 8String str3 = 你out了;System.out.println(str3.length(); / 输出 56获得字符串中的单个字符使用 charAt(index) 方法如 message.charAt(5);索引从 0 开始,到 message.length()-1 (如果message长度不为0)注意,不能用 message5 Hello,worldmessageindicesmessage.charAt(0)012345678910message.char

5、At(10)message.length() is 117字符串连接两种方法:使用 String 的 concat 方法字符串直接相加 (用+)多个字符串相加,支持连写:String str1 = Hello;String str2 = World;String str3 = str1.concat(str2); / 方法一String str4 = str1 + str2; / 方法二String str = str1 + str2 + str3 + str4;String str = str1.concat(str2).concat(str3).concat(str4);8提取子串可以使用

6、charAt 方法从字符串中提取单个字符。也可以使用String 类中的substring 方法从字符串中提取子串。String message = Hello,world;String str = message.substring(0, 6) + Java;Hello,worldmessageindices012345678910message.substring(1, 5)message.substring(6)subString 有两个方法:1) public String substring(int beginIndex, int endIndex) beginIndex: 开始点的

7、索引,包含本字符 endIndex: 结束点的索引,不包含本字符 得到从beginIndex到endIndex之间的子串2) public String substring(int beginIndex) beginIndex: 开始点的索引,包含本字符 得到从beginIndex开始直到字符串结束的字串9字符串比较:字符串是否相等使用 equals 方法,而不是 = :比较的是字符串对象引用的值,即判断是否指向相同的对象equals() 方法:比较的是字符串的内容String str1 = new String(Hello,world);String str2 = Hello,world;S

8、ystem.out.println(str1 = str2); / 输出 falseSystem.out.println(str1.equals(str2): / 输出 truepublic boolean equals(Object anObject)说明: 比较两个对象是否相等参数: anObject: 待比较的对象返回值: = true:说明相等 = false:说明不相等10字符串比较:比较大小compareTo() 方法public int compareTo(String anotherString)说明: 按照字典序来进行比较两个字符串,如 abcd 0:说明 this anot

9、herString 0:说明 this anotherStringString str1 = new String(Hello,world);String str2 = Hello,world;String str3 = hello,world;System.out.println(pareTo(str2); / 输出 0System.out.println(pareTo(str3): / 输出一个负数注:String 有一个 compareToIgnoreCase() 方法,执行的是不区分大小写的比较。11字符串转换一旦字符串被创建之后它的内容就不能改变。但是可以使用以下方法将字符串转换为新

10、字符串常用的转换函数有:toLowerCase():转换为全小写toUpperCase():转换为全大写trim():去掉头尾的空格replace(oldChar, newChar):将字符串中的 oldChar 用 newChar 来代替详细说明请参见 JDK 文档12在字符串中找到一个字符或子串用 indexOf() 方法public int indexOf(int ch);public int indexOf(int ch, int fromIndex);public int indexOf(String str);public int indexOf(String str, int f

11、romIndex);public int lastIndexOf(int ch);public int lastIndexOf(int ch, int fromIndex);public int lastIndexOf(String str);public int lastIndexOf(String str, int fromIndex);说明: 在本字符串中,查找一个字符/字符串。可以指定开始查找的位置。 indexOf:从前向后查找 lastIndexOf:从后向前查找返回值: indexOf: 得到第一次出现的位置。 lastIndexOf:得到最后一次出现的位置。 如果找不到,则返回

12、 -113Welcome to Java.indexOf(W); / returns 0.Welcome to Java.indexOf(x); / returns -1.Welcome to Java.indexOf(o, 5); / returns 9.Welcome to Java.indexOf(come); / returns 3.Welcome to Java.indexOf(Java, 5); / returns 11.Welcome to Java.indexOf(java, 5); / returns -1.Welcome to Java.lastIndexOf(a); /

13、returns 14.Welcome to Java.lastIndexOf(a, 13); / returns 12.Welcome to Java.lastIndexOf(Java, 5); / returns -1.messageindices012345678910 1112131414将字符和数字转换成字符串使用 valueOf() 方法,能够将字符和数字转换成字符串public static String valueOf(boolean b);public static String valueOf(char c);public static String valueOf(char

14、 data);public static String valueOf(char data, int offset, int count);public static String valueOf(double d);public static String valueOf(float f);public static String valueOf(int i);public static String valueOf(long l);public static String valueOf(Object obj);说明: 将字符或数字转换为字符串。返回值: 转换后的字符串String str

15、1 = String.valueOf(5.44); / str1=5.44String str2 = String.valueOf(true); / str2=true15举例:检测回文串提示用户输入一个字符串,然后报告该串是否为回文串:如果从前向后读它和从后向前读它都一样,则称为回文串16import javax.swing.JOptionPane;public class CheckPalindrome public static void main(String args) String s = JOptionPane.showInputDialog(Enter a string:);

16、String output = ; if (isPalindrome(s) output = s + is a palindrome; else output = s + is not a palindrome; JOptionPane.showMessageDialog(null, output); public static boolean isPalindrome(String s) int low = 0; int high = s.length() - 1; while (low 0 的值 pareTo(new Character(f); / 返回一个 0 的值c.equals(ne

17、w Character(b); / 返回 falsec.equals(new Character(d); / 返回 true23举例:统计字符串中的每个字母import javax.swing.JOptionPane;public class CountEachLetter public static void main(String args) String s = JOptionPane.showInputDialog(Enter a string:); int counts = countLetters(s.toLowerCase(); String output = ; for (in

18、t i = 0; i counts.length; i+) if (countsi != 0) output += (char) (a + i) + appears + countsi + (countsi = 1) ? timen : timesn); JOptionPane.showMessageDialog(null, output); public static int countLetters(String s) int counts = new int26; for (int i = 0; i s.length(); i+) if (Character.isLetter(s.cha

19、rAt(i) countss.charAt(i) - a+; return counts; 24String是Immutable的由于String的Immutable特性,因此每次对String的内容的修改,都会导致创建新的String对象如:String str = aa + bb + cc + dd一共创建了多少个String对象?答:7个:aa, bb, cc, dd, aabb, aabbcc, aabbccdd为了高效地进行字符串的“添加”、“插入”、“修改”操作,引入了StringBuffer/StringBuilder类25StringBuilder/StringBuffer类S

20、tringBuffer和StringBuilder功能类似:StringBuffer:线程安全的,在 JDK1.0 中引入StringBuilder:不是线程安全的,在 JDK1.5 中引入在单线程的程序中,StringBuffer和StringBuilder可以互换此处只介绍 StringBuffer26StringBuffer顾名思义,StringBuffer 封装了一个字符串缓冲区,可以给字符串缓冲器中添加、插入或追加内容。使用方法和String类似。构造方法:/ 创建一个空的 StringBuffer,长度为 16public StringBuffer();/ 创建一个空的 Strin

21、gBuffer,长度为 capacitypublic StringBuffer(int capacity);/和string参数一样的字符串。初始容量为 16 + str.length()public StringBuffer(String str);27追加新内容:用 append() 方法public StringBuffer append(boolean b);public StringBuffer append(char c);public StringBuffer append(char str);public StringBuffer append(double d);public

22、 StringBuffer append(float f);public StringBuffer append(int i);public StringBuffer append(long lng);public StringBuffer append(Object obj);public StringBuffer append(String str);public StringBuffer append(StringBuffer sb);StringBuffer sb = new StringBuffer();sb.append(Hello);sb.append( );sb.append(

23、World);String str = sb.toString();/ StringBuffer 支持连写:sb.append(Hello).append( ).append(World);28举例:忽略既非字母又非数字的字符,判断是否为回文串public class PalindromeIgnoreNonAlphanumeric public static void main(String args) String s = JOptionPane.showInputDialog(Enter a string:); String output = Ignoring non-alphanumer

24、ic characters, nis + s + a palindrome? + isPalindrome(s); JOptionPane.showMessageDialog(null, output); public static boolean isPalindrome(String s) String s1 = filter(s); String s2 = reverse(s1); return s2.equals(s1); public static String filter(String s) StringBuffer strBuf = new StringBuffer(); fo

25、r (int i = 0; i s.length(); i+) if (Character.isLetterOrDigit(s.charAt(i) strBuf.append(s.charAt(i); return strBuf.toString(); public static String reverse(String s) StringBuffer strBuf = new StringBuffer(s); strBuf.reverse(); return strBuf.toString(); 29main 方法main 方法只是一个普通方法main方法与带有参数的普通方法一样。可以通过

26、传递实参来调用main方法例如,在B类中的main方法被A中的方法调用,如下所示:public class A public static viod main(String args) String strs = BeiJing, ShangHai, Xian; B.main(strs); public class B public static viod main(String args) for (int i=0; iargs.length; i+) System.out.println(argsi); 30main 方法又不是一个普通的方法它是Java执行程序的入口点String arg

27、s 参数,又称为“命令行参数”命令行参数一般的格式:在main 方法中,是从args0, args1, ., argsn中得到参数,它们分别对应命令行中的 arg0, arg1, ., argnjava ApplicationName arg0 arg1 arg2 . argnJava解释器程序名称命令行参数31举例:public class ArgsTest public static viod main(String args) for (int i=0; iargs.length; i+) System.out.println(argsi); 执行:java ArgsTest BeiJi

28、ng ShangHai Xian输出:BeiJiongShangHaiXian32File类File类专门提供一种抽象,用于以独立于平台的方式处理大多数平台依赖的、复杂的文件和路径名问题。 File 类包含了文件名和目录路径33File的UML类图(部分)34举例:使用File类public class public static viod main(String args) java.io. = new java.io.File(image/up.gif); System.out.println(Does it exist? + (); System.out.println(Can it b

29、e read? + (); System.out.println(Can it be written? + (); System.out.println(Is it a directory? + (); System.out.println(Is it a file? + (); System.out.println(Is it absolute? + (); System.out.println(Is it hidden? + (); System.out.println(Absolute path is + (); System.out.println(Last modified on +

30、 new java.util.Date(); Does it exist? trueCan it be read? trueCan it be written? trueIs it a directory? falseIs it a file? trueIs it absolute? falseIs it hidden? falseAbsolute path is E:FreePPtechnologyAndroidprojectjava-testimageup.gifLast modified on Thu Aug 06 16:41:51 CST 200935文本IOFile对象封装了文件或路

31、径属性,但是不包含从文件中读写数据的方法。为了进行I/O操作,需要用适当的Java I/O类创建对象,这些对象包含从文件中读写数据的方法。本节介绍使用Scanner和PrintWriter类从(向)文本文件中读(写)字符串和数值信息。36使用PrintWriter写入数据37public class WriteData public static void main(String args) throws Exception java.io. = new java.io.File(scores.txt); if () System.out.println( exists); System.ex

32、it(0); java.io.PrintWriter output = new java.io.PrintWriter(file); output.print(zhangsan ); output.println(90); output.print(lisi ); output.println(85); output.close(); 输出到当前目录的 scores.txt 文件中,内容:zhangsan 90lisi 8538使用Scanner 读取数据39public class ReadData public static viod main(String args) throws Exception java.io. = new java.io.File(scores.txt); java.util.Scanner input = new java.util.Scanner(file); while (input.hasNext() String name

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论