Java语言程序设计(1).pptx_第1页
Java语言程序设计(1).pptx_第2页
Java语言程序设计(1).pptx_第3页
Java语言程序设计(1).pptx_第4页
Java语言程序设计(1).pptx_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

语言程序设计 刘炯 西安电子科技大学 通信工程学院 2 第八章 字符串和文本I/O n学习目标 l使用String类处理固定的字符串 l使用Character类处理单个字符 l使用StringBuilder/StringBuffer类处理可变字符串 l了解类String、StringBuffer和StringBuffer的区别 l学会如何将字符串通过命令行传递给main方法 l使用File类获得文件的属性、删除和重命名文件 l使用PrintWriter类向文件写数据 l使用Scanner类从文件读数据 3 字符串类String n构造一个字符串 n由于字符串使用频繁,所以Java提供了创建字符 串的快速初始化方法: n例: String message1 = “Hello World“; String message2 = new String(“Hello World“); String message3 = “; String message4 = new String(“); String stringRefVal = new String(stringLiteral); String stringRefVal = “some string“; 4 nString对象是永久的(Immutable) lString对象是永久的,它的内容不能改变 l下面的代码能够改变字符串的内容吗: String str = “Hello“; str = “World“; :String “Hello“ str :String “Hello“ str :String “World“ 可以看到,在执行 str = “World“ 时,会产生一个新的字符串对象。 5 nString类有 l15 个构造方法 l65 个方法 n详细说明见 JDK 文档 6 字符串长度 n使用 length() 方法得到字符串的长度: l由于Java中字符串是用 Unicode 存储的,因此 length() 得到的是 Unicode 字符的个数 l不管是中文、英文字符,每个字符长度都是 1 l注意: String 的 length() 是方法 Array 的 length 不是方法 String str1 = “Long time no see“; System.out.println(str1.length(); / 输出 16 String str2 = “西安电子科技大学“; System.out.println(str2.length(); / 输出 8 String str3 = “你out了“; System.out.println(str3.length(); / 输出 5 7 获得字符串中的单个字符 n使用 charAt(index) 方法 l如 message.charAt(5); l索引从 0 开始,到 message.length()-1 (如果message长 度不为0) l注意,不能用 message5 Hello,worldmessage indices message.charAt(0) 0123456789 10 message.charAt(10) message.length() is 11 8 字符串连接 n两种方法: l使用 String 的 concat 方法 l字符串直接相加 (用“+“) l多个字符串相加,支持连写: 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); 9 提取子串 n可以使用charAt 方法从字符串中提取单个字符。也可以 使用String 类中的substring 方法从字符串中提取子串。 String message = “Hello,world“; String str = message.substring(0, 6) + “Java“; Hello,worldmessage indices0123456789 10 message.substring(1, 5)message.substring(6) subString 有两个方法: 1) public String substring(int beginIndex, int endIndex) beginIndex: 开始点的索引,包含本字符 endIndex: 结束点的索引,不包含本字符 得到从beginIndex到endIndex之间的子串 2) public String substring(int beginIndex) beginIndex: 开始点的索引,包含本字符 得到从beginIndex开始直到字符串结束的字串 10 字符串比较:字符串是否相等 n使用 equals 方法,而不是 = l= :比较的是字符串对象引用的值,即判断是否指向 相同的对象 lequals() 方法:比较的是字符串的内容 String str1 = new String(“Hello,world“); String str2 = “Hello,world“; System.out.println(str1 = str2); / 输出 false System.out.println(str1.equals(str2): / 输出 true public boolean equals(Object anObject) 说明: 比较两个对象是否相等 参数: anObject: 待比较的对象 返回值: = true:说明相等 = false:说明不相等 11 字符串比较:比较大小 ncompareTo() 方法 public int compareTo(String anotherString) 说明: 按照字典序来进行比较两个字符串,如 abcd 0:说明 this anotherString 0 的值 pareTo(new Character(f); / 返回一个 0 的值 c.equals(new Character(b); / 返回 false c.equals(new Character(d); / 返回 true 24 举例:统计字符串中的每个字母 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 (int 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.charAt(i) countss.charAt(i) - a+; return counts; 25 String是Immutable的 n由于String的Immutable特性,因此每次对String的内容 的修改,都会导致创建新的String对象 l如: String str = “aa“ + “bb“ + “cc“ + “dd“ 一共创建了多少个String对象? l答:7个:“aa“, “bb“, “cc“, “dd“, “aabb“, “aabbcc“, “aabbccdd“ n为了高效地进行字符串的“添加”、“插入”、“修改”操作, 引入了StringBuffer/StringBuilder类 26 StringBuilder/StringBuffer类 nStringBuffer和StringBuilder功能类似: lStringBuffer:线程安全的,在 JDK1.0 中引入 lStringBuilder:不是线程安全的,在 JDK1.5 中引入 n在单线程的程序中,StringBuffer和StringBuilder可以互 换 n此处只介绍 StringBuffer 27 StringBuffer n顾名思义,StringBuffer 封装了一个字符串缓冲 区,可以给字符串缓冲器中添加、插入或追加内 容。使用方法和String类似。 n构造方法: / 创建一个空的 StringBuffer,长度为 16 public StringBuffer(); / 创建一个空的 StringBuffer,长度为 capacity public StringBuffer(int capacity); /和string参数一样的字符串。初始容量为 16 + str.length() public StringBuffer(String str); 28 n追加新内容:用 append() 方法 public StringBuffer append(boolean b); public StringBuffer append(char c); public StringBuffer append(char str); public StringBuffer append(double d); public 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(“World“); String str = sb.toString(); / StringBuffer 支持连写: sb.append(“Hello“).append( ).append(“World“); 29 举例:忽略既非字母又非数字的字符, 判断是否为回文串 public class PalindromeIgnoreNonAlphanumeric public static void main(String args) String s = JOptionPane.showInputDialog(“Enter a string:“); String output = “Ignoring non-alphanumeric 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(); for (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(); 30 main 方法 nmain 方法只是一个普通方法 lmain方法与带有参数的普通方法一样。可以通过传递 实参来调用main方法 l例如,在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); 31 nmain 方法又不是一个普通的方法 l它是Java执行程序的入口点 lString args 参数,又称为“命令行参数” n命令行参数 l一般的格式: l在main 方法中,是从args0, args1, ., argsn中得到 参数,它们分别对应命令行中的 arg0, arg1, ., argn java ApplicationName arg0 arg1 arg2 . argn Java 解释器 程序名称命令行参数 32 n举例: public class ArgsTest public static viod main(String args) for (int i=0; iargs.length; i+) System.out.println(argsi); 执行:java ArgsTest BeiJing ShangHai Xian 输出: BeiJiong ShangHai Xian 33 File类 nFile类专门提供一种抽象,用于以独立于平台的 方式处理大多数平台依赖的、复杂的文件和路径 名问题。 n File 类包含了文件名和目录路径 34 File的UML类图(部分) java.io.File +File(pathname:String)根据pathname创建File对象。pathname可以是文件或目录 +File(parent:String, child:String)在parent这个目录下,创建File对象,child可以使文件或目录 +File(parent:File, child:String)同上,只是parent是一个File对象 +exists():boolean 文件或目录是否存在 +canRead():boolean 是否可读 +canWrite():boolean 是否可写 +isDirectory():boolean 是否为目录 +isFile():boolean 是否为文件 +isAbsolute():boolean本File对象是否采用绝对路径来创建的 +isHidden():boolean 是否为隐藏文件 +getAbsolutePath():String 得到绝对路径 +getCanonicalPath():String 得到规范的绝对路径 +getName():String得到文件/目录名 +getPath():String 得到路径 +getParent():String 得到父目录的路径名 +lastModified():long 最后修改时间 +delete():boolean 删除 +renameTo(dest:File):boolean 重命名 35 举例:使用File类 public class FileTest public static viod main(String args) java.io.File file = new java.io.File(“image/up.gif“); System.out.println(“Does it exist? “ + file.exists(); System.out.println(“Can it be read? “ + file.canRead(); System.out.println(“Can it be written? “ + file.canWrite(); System.out.println(“Is it a directory? “ + file.isDirectory(); System.out.println(“Is it a file? “ + file.isFile(); System.out.println(“Is it absolute? “ + file.isAbsolute(); System.out.println(“Is it hidden? “ + file.isHidden(); System.out.println(“Absolute path is “ + file.getAbsolutePath(); System.out.println(“Last modified on “ + new java.util.Date(file.lastModified(); Does it exist? true Can it be read? true Can it be written? true Is it a directory? false Is it a file? true Is it absolute? false Is it hidden? false Absolute path is E:FreePPtechnologyAndroidprojectjava-testimageup.gif Last modified on Thu Aug 06 16:41:51 CST 2009 36 文本IO nFile对象封装了文件或路径属性,但是不包含从 文件中读写数据的方法。 n为了进行I/O操作,需要用适当的Java I/O类创建 对象,这些对象包含从文件中读写数据的方法。 n本节介绍使用Scanner和PrintWriter类从(向) 文本文件中读(写)字符串和数值信息。 37 使用PrintWriter写入数据 java.io.PrintWriter +PrintWriter(filename:String) 构造方法 +PrintWriter(filename:File) 构造方法 +print(s:String):void 写入一个字符串 +print(c:char):void写入一个char +print(cArray:char):void写入一个char数组 +print(i:int):void写入一个int +print(l:long):void写入一个long +print(f:float):void写入一个float +print(d:double):void写入一个double +print(b:boolean):void写入一个boolean 此外,还有重载的println、printf方法 38 public class WriteData public static void main(String args) throws Exception java.io.File file = new java.io.File(“scores.txt“); if (file.exists() System.out.println(“File already exists“); System.exit(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 90 lisi 85 39 使用Scanner 读取数据 java.io.Scanner +Scanner(source:String) 构造方法 +Scanner(source:File) 构造方法 +close():void关闭Scanner +hasNext():boolean 是否有输入 +next():String将输入作为String返回 +nextByte():byte将输入作为byte返回 +nextShort():short将输入作为short返回 +nextInt():int将输入作为int返回 +nextLong():long将输入作为long返回 +nextFloat():float将输入作为float返回 +nextDouble():double将输入作为double返回 +nextLine():String 读入一行 +useDelimiter(pattern:String):Scanner 设置分隔符 注:默认的分隔符是空格 40 public class ReadData public static viod main(String args) throws Exception java.io.File file = new java.io.File(“scores.txt“); java.util.Scanner input = new java.util.Scanner(file); while (input.hasNext() String name = input.next(); int score = input.nextInt(); System.out.println(name + “ “ + score); input.close(); 从当前目录的 scores.txt 文件中,依次读取。输出结果 zhangsan 90 lisi 85

温馨提示

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

评论

0/150

提交评论