第6讲字符和字符串_第1页
第6讲字符和字符串_第2页
第6讲字符和字符串_第3页
第6讲字符和字符串_第4页
第6讲字符和字符串_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

2023/2/61字符字符串主要内容字符数据类型及运算charletter=‘A’charnumChar=‘4’char类型数据可以转换成任意一种数值类型,反之亦然;将一个整数转换成一个char型数据时,只用到数据的低16位,其余部分被忽略。字符数据类型及运算charletter=‘A’charnumChar=‘4’char类型数据可以转换成任意一种数值类型,反之亦然;将一个整数转换成一个char型数据时,只用到数据的低16位,其余部分被忽略。4字符串类String创建一个字符串对象:Stringmessage="WelcometoJava";Stringmessage=newString("WelcometoJava");Strings=newString();获取字符串长度和在一个字符串中获取某个单个字符。字符串连接(concat)子串(substring(index)、substring(start,end))比较(equals、compareTo)字符串转换在一个字符串中找出一个字符或一个子串字符串和数组之间的转换将字符和数值转换成字符串5创建字符串对象StringnewString=newString(stringLiteral);

Stringmessage=newString("WelcometoJava");因为字符串使用非常频繁,所以Java提供一种简化的方法来初始化一个字符串对象:Stringmessage="WelcometoJava";6字符串是不可变的String对象是不可变的;它的内容是不能改变的。下列代码会改变字符串的内容吗?Strings="Java";s="HTML";7跟踪代码Strings="Java";s="HTML";8跟踪代码Strings="Java";s="HTML";9限定字符串因为字符串在程序设计中是不可变的,但同时又会频繁地使用,所以Java虚拟机为了提高效率和节约内存,对具有相同字符串序列的字符串直接量使用同一个实例。这样的实例被称为限定的(interned)。例如:下面的语句10举例程序结果显示

s1==s2是falses1==s3是true如果使用new操作符,就会创建一个新的对象。如果使用字符串初始化方法,如果限定对象已经被创建则没有新对象被创建。11跟踪代码12跟踪代码13跟踪代码14字符串比较15字符串比较equals Strings1=newString("Welcome"); Strings2="welcome";

if(s1.equals(s2)){//s1ands2havethesamecontents

}

if(s1==s2){//s1ands2havethesamereference

}16字符串比较(续)compareTo(Objectobject) Strings1=newString("Welcome"); Strings2="welcome";

if(pareTo(s2)>0){//s1isgreaterthans2}elseif(pareTo(s2)==0){//s1ands2havethesamecontents}else//s1islessthans217字符串长度、字符

以及组合字符串18获取字符串长度使用length()方法获取字符串的长度:message="Welcome";message.length()(返回7)19在字符串中获取单个字符不能使用message[0]使用message.charAt(index)下标index从0开始20字符串连接Strings3=s1.concat(s2);Strings3=s1+s2;s1+s2+s3+s4+s5等价于(((s1.concat(s2)).concat(s3)).concat(s4)).concat(s5);21获取子串22提取子串可以使用charAt方法从字符串中获取单个字符,你也可以使用String类中的substring方法从字符串中提取子串。Strings1="WelcometoJava";Strings2=s1.substring(0,11)+"HTML";23字符串的转换、替换和分割24举例"Welcome".toLowerCase()返回一个新字符串welcome。"Welcome".toUpperCase()返回一个新字符串WELCOME。"Welcome".trim()返回一个新字符串Welcome。"Welcome".replace('e','A')返回一个新字符串WAlcomA。"Welcome".replaceFirst("e","AB")返回一个新字符串WABlcome。"Welcome".replace("e","AB")返回一个新字符串WABlcomAB。"Welcome".replace("el","AB")返回一个新字符串WABlcome。25分割字符String[]tokens="Java#HTML#Perl".split("#",0);for(inti=0;i<tokens.length;i++)System.out.print(tokens[i]+"");JavaHTMLPerl显示26依照模式匹配、替换和分割可以通过指定某个模式来匹配、替换或分割一个字符串。这是一种非常有用且功能强大的特性,通常称之为正则表达式(regularexpression)。"Java".matches("Java");"Java".equals("Java");"Javaisfun".matches("Java.*");"Javaiscool".matches("Java.*");27依照模式匹配、替换和分隔方法replaceAll、replaceFirst和split也可以和正则表达式结合在一起使用。例如:下面的语句中用字符串NNN替换"a+b$#c"中的$、+或者#,然后返回一个新字符串。Strings="a+b$#c".replaceAll("[$+#]","NNN");System.out.println(s);这里的正则表达式[$+#]表示能够匹配$、+或者#模式。所以,输出是aNNNbNNNNNNc。

28依照模式匹配、替换和分隔下面的语句将字符串分隔为由标点符号分隔开的字符串数组。String[]tokens="Java,C?C#,C++".split("[.,:;?]");

for(inti=0;i<tokens.length;i++)System.out.println(tokens[i]);29找出字符串中的某个字符或者某个子串30找出字符串中的某个字符或者某个子串"WelcometoJava".indexOf('W')返回0。"WelcometoJava".indexOf('x')

返回-1。"WelcometoJava".indexOf('o',5)

返回9。"WelcometoJava".indexOf("come")返回3。"WelcometoJava".indexOf("Java",5)返回11。"WelcometoJava".indexOf("java",5)

返回-1。"WelcometoJava".lastIndexOf('a')

返回14。

31将字符和数字转换成字符串String类提供了几个静态的valueOf方法能够将字符、字符数组和数值转换成字符串。这些方法都有同样的名字valueOf,但有不同类型的参数类型:char、char[]、double、long、int和float型。例如:为了将一个double值转换为一个字符串,使用String.valueOf(5.44)。返回值是一个由字符"5"、"."、"4"和"4"构成的字符串。32问题:找出回文串目的:检测一个字符串是否是回文串:从前向后和从后向前读都是同一个字符串的字符串。程序实现importjava.util.Scanner;publicclassCheckPalindrome{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.print("Enterastring:");Strings=input.nextLine();if(isPalindrome(s))System.out.println(s+"isapalindrome");elseSystem.out.println(s+"isnotapalindrome");}

程序实现/**Checkifastringisapalindrome*/publicstaticbooleanisPalindrome(Strings){//Theindexofthefirstcharacterinthestringintlow=0;//Theindexofthelastcharacterinthestringinthigh=s.length()-1;while(low<high){if(s.charAt(low)!=s.charAt(high))returnfalse;//Notapalindromelow++;high--;}returntrue;//Thestringisapalindrome}}35Character类36举例CharactercharObject=newCharacter('b');charOpareTo(newCharacter('a'))返回1charOpareTo(newCharacter('b'))返回0charOpareTo(newCharacter('c'))返回-1charOpareTo(newCharacter('d')返回–2charObject.equals(newCharacter('b'))返回truecharObject.equals(newCharacter('d'))返回false37问题:统计字符串中每个字母的出现次数这个例子给出一个程序,统计在忽略字母大小写的情况下,字符串中每个字母出现的次数。38编程实现importjava.util.Scanner;publicclassCountEachLetter{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.print("Enterastring:");Strings=input.nextLine();//InvokethecountLettersmethodtocounteachletterint[]counts=countLetters(s.toLowerCase());//Displayresultsfor(inti=0;i<counts.length;i++){if(counts[i]!=0)System.out.println((char)('a'+i)+"appears"+counts[i]+((counts[i]==1)?"time":"times"));}}

39编程实现/**Counteachletterinthestring*/publicstaticint[]countLetters(Strings){int[]counts=newint[26];for(inti=0;i<s.length();i++){if(Character.isLetter(s.charAt(i)))counts[s.charAt(i)-'a']++;}returncounts;}}40StringBuilder/StringBuffer类StringBuilder/StringBuffer类是可以替代String类的另一种处理字符串的解决方案。一般来说,只要使用字符串的地方,都可以使用StringBuilder/StringBuffer类。StringBuilder/StringBuffer类比String类更灵活。可以给一个StringBuilder或StringBuffer中添加、插入或追加新的内容,但是String对象一旦创建,它的值就确定了。41StringBuilder的构造方法42修改生成器中的字符串43举例stringBuilder.append("Java");stringBuilder.insert(11,"HTMLand");stringBuilder.delete(8,11)将生成器变为WelcomeJava。stringBuilder.deleteCharAt(8)将生成器变为WelcomeoJava。stringBuilder.reverse()将生成器变为avaJotemocleW。stringBuilder.replace(11,15,"HTML")将生成器变为WelcometoHTML。stringBuilder.setCharAt(0,'w')将生成器变为welcometoJava。44toString、capacity、length、setLength和charAt方法45问题:忽略既非字母又非数字的

字符来判断回文串这个例子给出一个程序,检测一个字符串在忽略掉非字母和非数字的字符后,它是否是一个回文串。编程实现importjava.util.Scanner;publicclassPalindromeIgnoreNonAlphanumeric{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.print("Enterastring:");Strings=input.nextLine();System.out.println("Ignoringnon-alphanumericcharacters,\nis"+s+"apalindrome?"+isPalindrome(s));}/**Returntrueifastringisapalindrome*/publicstaticbooleanisPalindrome(Strings){Strings1=filter(s);//Createanewstringthatisthereversalofs1Strings2=reverse(s1);//Compareifthereversalisthesameastheoriginalstringreturns2.equals(s1);}编程实现/**Createanewstringbyeliminatingnon-alphanumericchars*/publicstaticStringfilter(Strings){//CreateastringbuilderStringBuilderstringBuilder=newStringBuilder();//Examineeachcharinthestringtoskipalphanumericcharfor(inti=0;i<s.length();i++){if(Character.isLetterOrDigit

温馨提示

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

评论

0/150

提交评论