您好,欢迎访问三七文档
Java高级程序设计宋成明45329261@qq.com第8章常用Java类String类的常用方法Random类集合与映射TechSupport系统TechSupport——技术支持,该程序是为用户提供技术支持的,用户可以在线与技术支持系统交互。String类的相关方法1.startswith方法publicbooleanstartsWith(Stringprefix)测试此字符串是否以指定的前缀开始,prefix-前缀。publicbooleanstartsWith(Stringprefix,inttoffset)测试此字符串是否以指定的前缀开始,该前缀以指定索引开始。prefix-前缀;toffset-在字符串中开始查找的位置。练习1:String类中有没有可以判断字符串是否以一个特定的后缀结尾的方法?练习2:查阅String类的文档,找到返回字符串中字符个数的方法。String类的相关方法2.trim方法publicStringtrim()去除字符串开头和结尾的空格。3.toLowerCase方法publicStringtoLowerCase()将字符串中所有字符都转换成小写。练习3:改进tech-support1程序中的SupportSystem类,使得程序能够忽略输入字符串前后的空格和大写字母。String类与StringBuffer类String类代表不可变字符串,即String对象的内容和长度是固定的。对String对象施加的操作并不改变对象实例本身,而是生成了一个新的实例。系统为String类对象分配内存是按照对象包含实际字符数分配。StringBuffer类代表可变字符串。如果修改一个StringBuffer类的字符串,不需要再创建新的字符串对象,而是直接操作原来的字符串。系统为StringBuffer类对象分配内存时,除了当前字符所占空间外,还提供另外16个字符的缓冲区。Java编译器对String对象的优化Stringa=ab;Stringb=a+b;System.out.println((a==b));以上代码的运行结果如何?结果1:true“a”+“b”的结果就是“ab”,这样a、b都是“ab”了,内容一样所以“相等”,结果true。结果2:false“a”+“b”会生成新的对象“ab”,a、b是不同的两个对象,(a==b)是比较对象引用,因此不相等,结果false。结果3:trueStringa=ab创建了新的对象ab,执行Stringb=a+b结果b=ab,这里没有创建新的对象,而是从JVM字符串常量池中获取之前已经存在的ab对象。因此a、b具有对同一个String对象的引用,两个引用相等,结果true。结果4:trueStringb=a+b;编译器将这个a+b作为常量表达式,在编译时进行优化,直接取结果ab。Stringa=ab;Stringb=ab;System.out.println((a==b));然后根据3的解释,得到结果true。增加随机行为——Random类随机与伪随机计算机很明确地定义了它的运作方式,所有的计算都是可预测的和可重复的,在计算机上很难产生真正意义上的随机行为。研究人员使用很多算法来产生看似随机的数的序列。这些数并不是真正的随机数,而是依据一定的复杂规则产生的,因此被称作伪随机数。在Java语言中,随机数的产生是由类库中的类实现的。增加随机行为——Random类Random类RandomrandomGenerator;randomGenerator=newRandom();intindex=randomGenerator.nextInt();System.out.println(index);练习4:定义一个RandomTester类,在该类中实现两个方法:printOneRandom(打印输出一个随机数);printMultiRandom(inthowMany)(输出指定个数的随机数)。这个类应该只创建一个Random类的实例(在构造器中),然后把这个实例保存在一个字段中。注意不要在每次产生新随机数的时候都创建新的Random实例。增加随机行为——Random类在有限范围内产生随机数publicintnextInt(intn)该方法返回一个伪随机数,它是从此随机数生成器的序列中取出的、在0(包括)和指定值(不包括)之间均匀分布的int值。练习5:在RandomTester类中实现throwDice方法:能够产生1~6(包含)的随机整数。练习6:写一个叫作getResponse方法,随机返回以下3个字符串中的一个:“yes”、“no”或“maybe”。练习7:扩展getResponse方法,使用ArrayList来保存一定数量的回答,然后随机返回其中一个。增加随机行为——Random类修改tech-support程序,产生随机的回答声明一个Random类型的字段来保存一个随机数发生器;声明一个ArrayList类型的字段来保存可能的回答;在Responder的构造器里创建Random和ArrayList的对象;用一些短语填充这个回答列表;当调用generateResponse方法时,随机返回一个短语。练习8:给RandomTester类增加一个方法:它有一个参数max,能够产生并返回从1到max(包含)的随机整数。练习9:给RandomTester类增加一个方法:它有两个参数min和max,能够产生在min和max(都包含)之间的随机整数。使用映射表示关联映射映射(map)是一个集合,它以键/值(key/value)对的形式保存数据。通过键可以查询到其对应的值。Map是java.util包中的接口。ArrayList和Map的区别是:Map里的每一个元素不是单个对象,而是一对对象。这一对对象是键对象和对应的值对象。使用映射可以方便地实现单向查找:已知要查找的键,通过这个键获得其对应的值。使用映射表示关联使用HashMapHashMap实现了Map接口。HashMap最重要的方法是put和get,put方法把一个条目放进映射中,而get根据一个已知的键取得其对应的值。HashMapString,StringphoneBook=newHashMapString,String();phoneBook.put(“CharlesNguyen”,“(531)93924587”);phoneBook.put(“LisaJones”,“(402)45364674”);phoneBook.put(“WilliamH.Smith”,“(998)54880123”);System.out.println(phoneBook.get(“LisaJones”));使用映射表示关联练习10:定义MapTester类,用HashMap来实现一个电话簿。(别忘了导入java.util.HashMap)。在这个类中,实现以下两个方法:publicvoidenterNumber(Stringname,Stringnumber)publicStringlookupNumber(Stringname)这两个方法使用HashMap的put和get方法来实现各自的功能。试一试:如果将一个条目(其键或值已经在映射中存在)放入映射中,会发生什么情况?如何判断某个键是否已经存储在一个映射中了(给出一个Java代码的例子)?如果试图查找一个值,但是其对应的键并不在映射中,会如何?如何能知道一个映射中存储条目的数量?使用映射表示关联在TechSupport系统中使用映射使用已知的单词作为键,而其对应的回答作为值,将问题与特定的回答联系在一起,使程序能够根据问题产生一个相关的回答。修改程序中的Responder类。进一步改进如果用户只是输入单个单词而不是整个句子,将回答与某个单词关联起来就很容易。如果用户可以输入句子,如何查找句子中所有的单词可能对应的回答?如何将句子分割成单词?如何使用集合?使用集合集合集合(Set)是一种容器,其中存储的每个不同的元素只出现一次,并且元素的排列没有任何特定的顺序。Set是java.util包中的接口。HashSet类实现了Set接口。HashSet的使用和ArrayList的使用几乎没什么区别。在Java中使用不同种类的容器的方法都是相似的。区别只在于每个容器不同的功能。使用集合Java中的容器类型集合(Set):不区分元素的顺序,不允许出现重复元素;列表(List):列表会保持元素加入时的顺序,以索引的方式提供对元素的访问,允许包含重复元素;映射(Map):保存成对的“键-值”信息,映射中不能包含重复的键,每个键最多只能映射一个值。理解不同的容器类型:容器名字的第二个单词更好地表达容器存储什么样的数据;容器名字的第一个单词则表明容器如何存储数据。使用集合Java容器相关API关系结构CollectionSetListHashSetTreeSetArrayListVectorStackMapHashMapHashtableTreeMapPropertiesEnumerationStringTokenizerjava.util.Arraysjava.util.Collections分割字符串String类的split方法publicString[]split(Stringregex)根据给定的正则表达式的匹配来拆分当前字符串。将拆分得到的字符串保存在一个字符串数组中返回,结果数组中不包括结尾空字符串。publicHashSetStringgetInput(){……StringinputLine=reader.nextLine().trim().toLowerCase();String[]wordArray=inputLine.split();HashSetStringwords=newHashSetString();for(Stringword:wordArray){words.add(word);}returnwords;}HashSetStringwords=newHashSetString(Arrays.asList(wordArray));完成TechSupport系统改进Responder类的generateResponse方法publicStringgenerateResponse(HashSetStringwords){IteratorStringit=words.iterator();while(it.hasNext()){Stringword=it.next();Stringresponse=responseMap.get(word);if(response!=null){returnresponse;}}returnpickDefaultResponse();}Backdrops:-Thesearefullsizedbackdrops,justscalethemup!-CanbeCopy-PastedoutofTemplatesforuseanywhere!TitleBackdropSlideBackdropPrintBackdrop!-.GIFclipartisanimated.-.JPGclipartcanbescaledupandtakeuplittlefilespace.-.PNGclipartcanbescaledunusuallylargewithoutdistortion.TransitionalBackdrop
本文标题:常用java类
链接地址:https://www.777doc.com/doc-3356779 .html