java语言程序设计8

上传人:ll****x 文档编号:243009637 上传时间:2024-09-13 格式:PPTX 页数:42 大小:146.65KB
返回 下载 相关 举报
java语言程序设计8_第1页
第1页 / 共42页
java语言程序设计8_第2页
第2页 / 共42页
java语言程序设计8_第3页
第3页 / 共42页
点击查看更多>>
资源描述
,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,#,42,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,#,语言程序设计,1,第八章 字符串和文本,I/O,学习目标,使用,String,类处理固定的字符串,使用,Character,类处理单个字符,使用,StringBuilder/StringBuffer,类处理可变字符串,了解类,String,、,StringBuffer,和,StringBuffer,的区别,学会如何将字符串通过命令行传递给,main,方法,使用,File,类获得文件的属性、删除和重命名文件,使用,PrintWriter,类向文件写数据,使用,Scanner,类从文件读数据,2,字符串类,String,构造一个字符串,由于字符串使用频繁,所以,Java,提供了创建字符串的快速初始化方法:,例:,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;,3,String,对象是永久的(,Immutable,),String,对象是永久的,它的内容不能改变,下面的代码能够改变字符串的内容吗:,String str = Hello;,str = World;,:String,Hello,str,:String,Hello,str,:String,World,可以看到,在执行,str = World,时,会产生一个新的字符串对象。,4,String,类有,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();,/,输出,16,String str2 = ,西安电子科技大学,;,System.out.println(str2.length();,/,输出,8,String str3 = ,你,out,了,;,System.out.println(str3.length();,/,输出,5,6,获得字符串中的单个字符,使用,charAt(index),方法,如,message.charAt(5);,索引从,0,开始,到,message.length()-1 (,如果,message,长度不为,0),注意,不能用,message5,H,e,l,l,o,w,o,r,l,d,message,indices,message.charAt(0),0,1,2,3,4,5,6,7,8,9,10,message.charAt(10),message.length() is 11,7,字符串连接,两种方法:,使用,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,提取子串,可以使用,charAt,方法从字符串中提取单个字符。也可以使用,String,类中的,substring,方法从字符串中提取子串。,String message = Hello,world;,String str = message.substring(0, 6) + Java;,H,e,l,l,o,w,o,r,l,d,message,indices,0,1,2,3,4,5,6,7,8,9,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,开始直到字符串结束的字串,9,字符串比较:字符串是否相等,使用,equals,方法,而不是,=,=,:比较的是字符串,对象引用的值,,即判断是否指向相同的对象,equals(),方法:比较的是字符串的,内容,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,),说明:,比较两个对象是否相等,参数:,an,Object,:,待比较的对象,返回值:,=,true:说明相等,=,false:说明不相等,10,字符串比较:比较大小,compareTo(),方法,public,int,compareTo(String anotherString),说明:,按照字典序来进行比较两个字符串,如,abcd 0,:说明,this anotherString, 0,:说明,this anotherString,String str1 =,new,String(Hello,world);,String str2 = Hello,world;,String str3 = hello,world;,System.out.println(pareTo(str2);,/,输出,0,System.out.println(pareTo(str3):,/,输出一个负数,注:,String,有一个,compareToIgnoreCase(),方法,执行的是不区分大小写的比较。,11,字符串转换,一旦字符串被创建之后它的内容就不能改变。但是可以使用以下方法将字符串转换为新字符串,常用的转换函数有:,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,fromIndex);,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,:得到最后一次出现的位置。,如果找不到,则返回,-1,13,Welcome 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); / returns 14.,Welcome to Java.lastIndexOf(a, 13); / returns 12.,Welcome to Java.lastIndexOf(Java, 5); / returns -1.,message,indices,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,14,将字符和数字转换成字符串,使用,valueOf(),方法,能够将字符和数字转换成字符串,public,static,String valueOf(,boolean,b);,public,static,String valueOf(,char,c);,public,static,String valueOf(,char,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 str1 = String.valueOf(5.44);,/ str1=5.44,String str2 = String.valueOf(true);,/ str2=true,15,举例:检测回文串,提示用户输入一个字符串,然后报告该串是否为回文串:如果从前向后读它和从后向前读它都一样,则称为回文串,16,import,javax.swing.JOptionPane;,public,class,CheckPalindrome ,public static void,main(String args) ,String s = JOptionPane.showInputDialog(Enter a string:);,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(,new,Character(b);,/,返回,false,c.equals(,new,Character(d);,/,返回,true,23,举例:统计字符串中的每个字母,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 int,26;,for,(,int,i = 0; i s.length(); i+),if,(Character.isLetter(s.charAt(i),countss.charAt(i) - a+;,return,counts;,24,String,是,Immutable,的,由于,String,的,Immutable,特性,因此每次对,String,的内容的修改,都会导致创建新的,String,对象,如:,String str = aa + bb + cc + dd,一共创建了多少个,String,对象?,答:,7,个:,aa, bb, cc, dd, aabb, aabbcc, aabbccdd,为了高效地进行字符串的“添加”、“插入”、“修改”操作,引入了,StringBuffer/StringBuilder,类,25,StringBuilder/StringBuffer,类,StringBuffer,和,StringBuilder,功能类似:,StringBuffer,:线程安全的,在,JDK1.0,中引入,StringBuilder,:不是线程安全的,在,JDK1.5,中引入,在单线程的程序中,,StringBuffer,和,StringBuilder,可以互换,此处只介绍,StringBuffer,26,StringBuffer,顾名思义,,StringBuffer,封装了一个字符串缓冲区,可以给字符串缓冲器中添加、插入或追加内容。使用方法和,String,类似。,构造方法:,/,创建一个空的,StringBuffer,,长度为,16,public,StringBuffer();,/,创建一个空的,StringBuffer,,长度为,capacity,public,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,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);,28,举例:忽略既非字母又非数字的字符,判断是否为回文串,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();,29,main,方法,main,方法只是一个普通方法,main,方法与带有参数的普通方法一样。可以通过传递实参来调用,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);,30,main,方法又不是一个普通的方法,它是,Java,执行程序的入口点,String args,参数,又称为“,命令行参数,”,命令行参数,一般的格式:,在,main,方法中,是从,args0, args1, ., argsn,中得到参数,它们分别对应命令行中的,arg0, arg1, ., argn,java ApplicationName arg0 arg1 arg2 . argn,Java,解释器,程序名称,命令行参数,31,举例:,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,32,File,类,File,类专门提供一种抽象,用于以独立于平台的方式处理大多数平台依赖的、复杂的文件和路径名问题。,File,类包含了文件名和目录路径,33,File,的,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 be 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 ,+ new java.util.Date();,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,35,文本,IO,File,对象封装了文件或路径属性,但是不包含从文件中读写数据的方法。,为了进行,I/O,操作,需要用适当的,Java I/O,类创建对象,这些对象包含从文件中读写数据的方法。,本节介绍使用,Scanner,和,PrintWriter,类从(向)文本文件中读(写)字符串和数值信息。,36,使用,PrintWriter,写入数据,37,public,class,WriteData ,public static,void,main(String args),throws,Exception,java.io. =,new,java.io.File(scores.txt);,if,(),System.out.println( 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,38,使用,Scanner,读取数据,39,public,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 = input.next();,int,score = input.nextInt();,System.out.println(name + + score);,input.close();,从当前目录的,scores.txt,文件中,依次读取。输出结果,zhangsan 90,lisi 85,40,举例:替换文本,编写名为,ReplaceText,的类,用新的字符串替换文本文件中的字符串,文件名和字符串作为命令行参数传递,格式如下:,java ReplaceText source oldString newString,例如,调用,java ReplaceText FormatString.java t.txt StringBuilder StringBuffer,用,Stringbuffer,代替,FormatString.java,中所有的,StringBuider,,并存成新文件,t.txt,。,41,import,java.io.File;,import,java.io.PrintWriter;,import,java.util.Scanner;,public,class,ReplaceTest,public static void,main(String args),throws,Exception,if,(args.length != 4) ,System.out.println(,Usage: java ReplaceText source oldStr newStr);,System.exit(0);,=,new,0);,if,(!source() ,System.out.println(Source file + args0 + does not exist);,System.exit(0);,=,new,1);,if,(target() ,System.out.println(Target file + args1 + already exists);,System.exit(0);,Scanner input =,new,Scanner(sourceFile);,PrintWriter output =,new,PrintWriter(targetFile);,while,(input.hasNext() ,String s1 = input.nextLine();,String s2 = s1.replaceAll(args2, args3);,output.println(s2);,input.close();,output.close();,42,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!