第7章java字符串

上传人:沈*** 文档编号:147387934 上传时间:2022-09-02 格式:DOC 页数:17 大小:504.50KB
返回 下载 相关 举报
第7章java字符串_第1页
第1页 / 共17页
第7章java字符串_第2页
第2页 / 共17页
第7章java字符串_第3页
第3页 / 共17页
点击查看更多>>
资源描述
字符串处理 1、字符串的分类 String类String类用于存储和维护值不变的字符串对象。字符串常量l 是在双引号之间的字符序列。l Java中相同的字符串常量属于同一个对象。例;String str1=”Hello “,str2=”Hello”;System.out.println(str1=str2); /trueSystem.out.println(“java”=”java”); /true“=”:判断是否是同一个对象。l String对象可以直接在屏幕上输出。建立字符串对象l String类的构造函数l 字符串常量初始化一个String类的引用。例:String myString = “My string”;等价于:char c=M,y, ,s,t,r,I,n,g;String myString=new String(c);例:String s1=”ABC”; String s2=”DEFG”; s1=s2; /s1,s2引用同一个对象。l “+”可以对字符串常量和多种数据类型进行连接操作。String first=many ;String second=hands;myString=first+second;System.out.println(myString);/ many handsmyString = fifty five is +5+5;System.out.println(myString);/ fifty five is 55myString = 5+5+ is ten;System.out.println(myString);/ 10 is tenString str1=Hello,str2=Hello;System.out.println(Result=+(str1=str2);/ Result=true注意;1运算符+从左向右结合。 2一个基本类型的tostring()方法,如: Integer.tostring() 返回相应的String。当使用+运算符连接两个字符串的时候,所有这些操作都自动执行。 3“”:产生一个全新的String对象“”:变量引用一个全新的String对象。l 总结1. 单独使用引号创建的字符串都是常量,编译期就已经确定存储到String Pool中。2. 使用new String()创建的对象会存储到heap中,是运行期新创建的。3String s1=”java”;/在String Pool中创建”java”对象 String s2=”java”;/JVM在String Pool中找到相同值对象,则s2引用s1所引用的对象”java”。 String s3 = new String(“java”); String Pool“java”栈String s1String s2String s3堆“java”复制 s1= =s2 true s1= =s3 false s1.equals(s3) true3. 使用只包含常量的字符串连接符如aa+aa创建的也是常量,编译期就能确定,已经确定存储到String Pool中。4. 使用包含变量的字符串连接符如aa+ s1创建的对象是运行期才创建的,存储在heap中。String类的常用方法public boolean equals(Object anObject)当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的 String 对象时,结果才为 true。public String intern()当调用 intern 方法时,如果String Pool已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回String Pool中的字符串。否则,将此 String 对象添加到String Pool中,并且返回此 String 对象的引用。例:String s1=”java”; String s2=new String(“java”); s2 = s2.intern(); s1 = = s2 true例:public static String valueOf(基本类型)可以将基本类型转换为字符串。public String split(String regex)将一个字符串按指定的分隔符分隔,返回分隔后的字符串数组。举例: 练习:1、 编写程序,输出整型数据长度。2、 编写一个程序,输出一个字符串中大写英文字母数,小写英文字母数,非英文字母数。3、 编写一个方法,输出在一个字符串中指定字符串出现的次数。4、 有一行文本,单词之间采用空格隔开,要求统计其中单词的个数。 StringBuffer对象对象可直接改变,如:正在串中添加、删除或替换子串时。创建StringBuffer对象:例:StringBuffer aString = new StringBuffer(“how are you”);StringBuffer类的常用方法 往StringBuffer对象里添加字符串和基本类型数据append(各种类型) 允许在StringBuffer对象中存放字符串的尾部添加字符串。 插入字符串insert(int ,多种类型) 将字符串插入StringBuffer对象中 删除字符串delete(int start,int end) 删除指定范围字符deleteCharAt(int index) 删除指定位置字符 从StringBuffer中提取/改变字符串char charAt(int) 提取给定下标位置的字符getChars(int , int , char , int )提取一段字符并将它们存放在始于某一指定下标位置的字符类型数组中。setCharAt(int,char)改变StringBuffer对象中的单个字符。replace(intstart,intend,String str)改变指定位置字符串reverse() 将StringBuffer对象中的字符序列前后顺序完全颠倒过来。 从StringBuffer创建String对象 例:String bString = aString.toString(); 举例: StringTokenizer类 (java.util包)StringTokenizer对象称作一个字符串分析器。常用构造函数:StringTokenizer(String s) 为字符串s构造一个分析器,使用默认的分隔符集合:空格符(若干个空格被看做一个空格)、换行符、回车符、Tab符等。StringTokenizer(String s,String delim) 为字符串s构造一个分析器,参数delim中的字符被作为分隔符。 方法:nextToken():将在字符串中获取下一个单词hasMoreTokens():字符串中是否还有单词countTokens():得到字符串中一共有多少个单词 例:String s=”I am Geng.X.y,she is my girlfriend”; StringTokenizer st=new StringTokenizer(s,” ,”); int number=st.countTokens(); while(st.hasMoreTokens() String str=st.nextToken(); System.out.println(str); System.out.println(“还剩“+st.countTokens()+”个单词”); System.out.println(“s共有单词 “ + number + “个”);l 练习: 1编写一个方法,返回一个double型二维数组,数组中的元素通过解析字符串参数获得。如果字符串参数:”1,2;3,4,5;6,7,8”对应的数组为: d00=1.0 d01=2.0d10=3.0 d11=4.0 d12=5.0d20=6.0 d21=7.0 d22=8.02定义有10个String元素的数组,每个数组元素包含形如“month/day/year”的任意字符串。例如:“10/29/99”或“12/5/01”。分析数组中的每个元素并按照此种形式输出日期99年1月29日。3编写程序,使得该程序可以将正文中每个单词里的字母顺序颠倒,例如:”To be or not to be” 变为 ”oT eb ro ton ot eb”(若整个字符串顺序颠倒,如eb ot ton ro eb oT)正则表达式是一种可以用于模式匹配和替换的强有力的工具,一个正则表达式就是由普通的字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式,它描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。1正则表达式的基本语法 参见java.util.regex.Pattern(1) 字符 在进行字符匹配时,一般有如下3种情况。 可以使用普通字符(包括一些不可见字符)来匹配确定的单个字符。例如正则式“a”就表示匹配字符串或子串“a”。 可以使用预定义字符来表示给定范围中的某个字符。例如正则式“d”就表示匹配0-9中的任意一个数字字符。 如果预定义字符不能满足指定范围的要求,也可以使用“”自定义的范围。例如“a-z0-9”表示匹配小写字母a-z或数字0-9中的某一个字符。 (2) 量词在匹配过程中,有时需要指定某个字符或组出现的次数,这时就需要使用量词。 “*”表示指定的字符或组可以出现任意的次数(包括不出现)。例如“a*”就表示有任意个“a”。 “+”表示指定的字符或组至少要出现一次。例如“a+”表示至少有一个“a”。 “?”表示指定的字符或组最多出现一次。例如“a?”表示有一个“a”或什么都没有。 “n”、“m,n”、“n,”表示指定的字符或组必须出现n次、可以出现m-n次、最少出现n次。例如,“a2b2-3”表示由两个“a”打头后跟2个或3个 “b”。 (3) 边界符在进行匹配的时候,边界符不会匹配任何字符,只代表边界的缝隙。要注意的是,不可以将边界符理解为不可见字符,不可见字符是有内容的,只是不可见而已;而边界符不对任何字符进行匹配,只代表某个临界点。 “”与“$”分别表示的是字符串开始与结束的位置,若要求匹配的是整个字符串的内容,而不是字符串中的一部分,此时便可以使用与$加以说明。例如,“a*$”表示的是由任意个“a”组成的字符串,而“a*”可以表示匹配整个字符串或其子串。 “b”表示的是单词边缘,在要求匹配的内容是整个单词,而不是单词的一部分时,b就派上用场了。例如“bTomb”对“Tommy Tom”进行匹配,只会匹配后面的单词“Tom”,而不会匹配“Tommy”中的“Tom”,而如果不使用“b”则两个都可以匹配。 (4) 匹配次数的贪婪与非贪婪贪婪与非贪婪模式是针对量词而言的,其修饰符应该放在量词的后面。在匹配有重复字符或组出现的情况下,贪婪与非贪婪模式有不同的含义。 在贪婪模式下进行匹配时,将按照最大限度的可能进行匹配。 非贪婪模式则不同,其在匹配时按照最小限度的可能进行匹配。例如,对于字符串“abbbabbba”,若使用正则表达式“aw+a”进行匹配,其会按照贪婪模式进行匹配,匹配到的内容为“abbbabbba”;而若使用正则表达式“aw+?a”,则会以非贪婪模式进行匹配,匹配到的内容为“abbba”。 (5) 分组及组引用实际应用中,有时需要重复出现的不是单个字符,而是特定的一组字符。例如要匹配由任意个“ab”组成的字符串。 “()”为分组操作符,其功能为将特定的一组字符作为一个原子(不可分)的匹配单元来看待。例如,“(ab)*”表示匹配由任意个“ab”组成的字符串或子串。 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 (A)(B(C) 中,存在四个这样的组: (A)(B(C) A (B(C) (C) 2Pattern类 获得对象:public static Pattern compile(String regex) 将指定的正则表达式编译成Pattern对象返回。public static Pattern compile(String regex,int flags)将指定的正则表达式按照指定的匹配标志编译成Pattern对象返回。常用方法:public Matcher matcher(CharSequence input) input表示将要被匹配的字符序列,该方法将返回表示将要被匹配字符序列的匹配器对象。public String pattern()该方法将以字符串的形式返回该模式对象表示的正则表达式。public String split(CharSequence input) input表示需要被切割的字符序列。该方法将使用此模式对象将指定的字符序列进行切割,之后将切割的子串以字符串数组的方法返回。例TestSplit.java 3Matcher类 该类的对象表示将要进行模式匹配的字符串或字符序列。 该类的对象通过Pattern对象中的matcher方法得到。常用方法:public boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。String group()返回当前查找而获得的与组匹配的所有子串内容 String group(int group) 返回当前查找而获得的与指定的组匹配的子串内容appendReplacement(StringBuffer sb, String replacement) 将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里。appendTail(StringBuffer sb) 方法则将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里。public String replaceAll(String replacement)替换模式与给定替换字符串相匹配的输入序列的每个子序列。public String replaceFirst(String replacement)替换模式与给定替换字符串匹配的输入序列的第一个子序列。例:TestReplacement.java例:使用正则表达式将文本中“00:00(a/p)m”格式的时间修改为24小时制式的时间,修改后将结果输出。TestRegex.java输出形式:初始字符串为:现在的时刻为10:51pm,这里的营业时间为:每天8:00am到5:30pm!1将10:51pm替换为22:512将8:00am 替换为8:003将5:30pm替换为17:30最后的结果为:现在的时刻为22:51,这里的营业时间为:每天8:00到17:30!1String str=01/01/02,01/02/02,01/03/95,01/04/02; StringTokenizer st=null; StringBuffer sb=new StringBuffer(); String subStr=new String43; for(int i=0;istr.length;i+) st=new StringTokenizer(stri,/); int count=st.countTokens(); for(int j=0;jcount;j+) subStrij=st.nextToken(); if(subStri2.startsWith(0) System.out.println(20+subStri2+年+subStri0+月+subStri1+日); else System.out.println(19+subStri2+年+subStri0+月+subStri1+日); 2 String text=To be or not to be; StringTokenizer st=new StringTokenizer(text); String subStr=new Stringst.countTokens(); StringBuffer reStr=new StringBuffer(); for(int i=0;isubStr.length;i+) subStri=st.nextToken(); reStr.append(new StringBuffer(subStri).reverse(); reStr.append( ); System.out.println(reStr.toString() ); String string1=Too many ; String string2=cooks; String string3=Too many cooks; string1 += string2; System.out.println(1); if(string1=string3) System.out.println(string1+=+string2); else System.out.println(string1+!=+string2); System.out.println(2); if(string1.equalsIgnoreCase(string3) System.out.println(string1+=+string2); else System.out.println(string1+!=+string2); System.out.println(3); /string1=string1.intern(); if(string1=string3) System.out.println(string1+=+string2); else System.out.println(string1+!=+string2);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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