首页 6字符串类[1]

6字符串类[1]

举报
开通vip

6字符串类[1]null第6章 字符串第6章 字符串概述概述字符串:连续排列的一个或多个字符。是编程中常用的数据类型。 Java中的字符串类型是类类型,Java的字符串都是类的对象。 java中的字符串类 常量字符串:String类。 String类的对象表示的字符串创建以后就不能变动 可变字符串:StringBuffer类。 StringBuffer类的对象表示的字符串创建以后可以修改6.1 字符串与String类6.1 字符串与String类String类的对象一经创建则不能变动内容。 “hello”:是String类型对象5...

6字符串类[1]
null第6章 字符串第6章 字符串概述概述字符串:连续排列的一个或多个字符。是编程中常用的数据类型。 Java中的字符串类型是类类型,Java的字符串都是类的对象。 java中的字符串类 常量字符串:String类。 String类的对象表示的字符串创建以后就不能变动 可变字符串:StringBuffer类。 StringBuffer类的对象表示的字符串创建以后可以修改6.1 字符串与String类6.1 字符串与String类String类的对象一经创建则不能变动 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 。 “hello”:是String类型对象5 int 14.5 double true boolean ‘c’ char “hello” String唯一一个有字面常量形式的类6.1.1 字符串与String类6.1.1 字符串与String类String 字符串字面常量 “abc”(双引号括起的一串字符) 系统会创建一个String类的对象(匿名String类对象)。 定义String对象 String c1; //定义引用变量c1,目前并没有创建对象 c1=“Hello”; //将“hello”对象赋值给c1 问题: String s1,s2; s1=“hello”; s2=s1; s1=“world”;6.1.2 创建String类的对象6.1.2 创建String类的对象String类提供了多个构造方法,允许多种创建字符串对象的方法 String s1,s2; s1=new String(); s1=new String(“abc”); s2=new String(s1); char chars[3]={‘a’,’b’,’c’}; s1=new String(chars); …… 用new创建字符串对象,与直接用字符串字面常量赋值,多数情况下效果是一样的,但在某些情况下会有一些差异。String s1="hello"; String s2=new String("hello"); String s3="hello"; String s4=new String("hello");6.1.3 String类常用方法6.1.3 String类常用方法获得字符串长度 int length(): 字符抽取 char charAt(int index) 提取子字符串 String subString(int beginIndex) String subString(int beginIndex,int endIndex)(不包括endIndex处字符) 查找操作 int indexOf(int ch) int indexOf(inc ch,int fromIndex) int indexOf(String s) int indexOf(String str,int fromIndex) 一套对应的lastindexOf方法注:String类的对象是不能改变的,返回的字符串都是新创建的String对象。null【例6-1】字符串基本操作 public class Test{ public static void main(String args[]){ int i; char c; String s=new String("Hello World"); i=s.length(); System.out.println(i); c=s.charAt(1); System.out.println(c); String s1=s.substring(3); System.out.println(s1); String s2=s.substring(1,4); System.out.println(s2); i=s.indexOf('W'); System.out.println(i); String s3="elo"; i=s.indexOf(s3); System.out.println(i); } }String类不提供改变字符串的方法,故让多个引用指向一个字符串对象是安全的。null比较 boolean equals ( Object anObject ) int compareTo ( String anotherString ) boolean equalsIgnoreCase ( String anotherString ) public int compareToIgnoreCase(String str) 检查字符串格式 public boolean startsWith( String prefix) public boolean endsWith( String suffix) public boolean startsWith( String prefix, int toffset)null【例6-2】字符串比较 class Test{ public static void main(String args[]) { String s1="abcd",s2="abcd",s3="afgd",s4="abcdef"; //equals与compareTo System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s1.compareTo(s2)); System.out.println(s1.compareTo(s3)); System.out.println(s1.compareTo(s4)); System.out.println("-----------------"); //equals与== String s5=new String("abcd"); System.out.println(s1==s5); System.out.println(s1.equals(s5)); System.out.println(s1==s2); } }null字符串变换(创建字符串的副本) String concat(String str) String replace(char oldChar,char newChar) String toLowerCase( ) String toUpperCase( ) public String trim() public char[] toCharArray() 字符串变换中最常见的是去除字符串的前导空白和尾部空白,以及替换字符串中的某些部分,将字符串做大小写变换等。 一些静态方法(将其他类型转换为字符串) 有一套重载的静态方法,用于将其他类型转换为字符串。 public static String valueOf( Object obj) public static String valueOf(int i) ......null【例6-3】 字符串变换。 class Test{ public static void main(String args[]){ String s1=" hello world! "; System.out.println(s1); String s2,s3,s4; s2=s1.trim(); //去除前导和尾部空格 System.out.println(s2); s3=s2.toUpperCase(); //s2进行大写变换 System.out.println(s3); s4=s2.replace('e', 'k');//s2中的e替换为k System.out.println(s4); } }6.1.4 应用实例6.1.4 应用实例【例6-4】定义一个学生类。 class Student{ private String no; private String name; private String specialty; Student(String n,String na,String s) { no=n;name=na;specialty=s; } void set(String n,String na,String s) { no=n;name=na;specialty=s; } public String toString(){ return "学号:"+no+",姓名:"+name+",专业:"+specialty; } boolean testName(String na) { return name.equals(na); } }nullpublic class Test{ public static void main(String args[ ]) { Student s=new Student("001","王小小","计科"); String str="王小小"; if(s.testName(str)) System.out.println(s.toString()); else System.out.println("找错人了!"); } } null【例6-5】用一个字符串,表示多个电话号码,号码之间用字符‘/‘隔开, 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 字符串,提取出所有的电话号码,并输出。 public class Test{ public static void main(String args[]){ int start=0,end=0; String s="13930200001/13833284785/13930859999"; String s1; while(true){ end=s.indexOf('/', start); if(end==-1) break; s1=s.substring(start, end); System.out.println(s1); start=end+1; } System.out.println(s.substring(start)); } }6.2 StringBuffer与StringBuilder6.2 StringBuffer与StringBuilderJava提供了支持改变的字符串类StringBuffer和StringBuilder。 其区别在于 StringBuffer是线程安全的 StringBuilder不是线程安全的6.2.1 创建StringBuffer类对象 6.2.1 创建StringBuffer类对象 两个数据: 字符串长度 字符串缓冲区的容量。 构造方法 public StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。 public StringBuffer(int capacity) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。 public StringBuffer( String str) 构造一个字符串缓冲区,并将其内容初始化为String对象str指定的字符串内容。该字符串的初始容量为 16 加上字符串参数的长度。 6.2.2 StringBuffer类的常用方法6.2.2 StringBuffer类的常用方法长度与容量 public int length()返回字符串长度(即字符数)。 public int capacity()返回当前容量。 不改变字符串的一些方法 与String类类似的方法,如:charAt,indexOf,lastIndexOf,subString。 改变字符串 1)重新设置某个位置的字符值。 public void setCharAt(int index,char ch) 2)在字符串末尾添加 public StringBuffer append(Type obj) 其中Type可以为String、StringBuffer、Object、字符数组、所有基本类型。 null 3)在字符串特定位置插入 public StringBuffer insert(int offset, Type obj) 4)在字符串中删除某些字符,Java提供了两个方法。 public StringBuffer deleteCharAt(int index) public StringBuffer delete(int start, int end) 移除此序列的子字符串中的字符。该子字符串从指定的 start 处开始,一直到索引 end - 1 处结束,如果不存在end-1处字符,则一直到序列尾部。 5)替换字符串中的某些字符,Java提供了replace方法。 public StringBuffer replace(int start, int end, String str) 除此外StringBuffer类还提供了其他方法,如reverse将StringBuffer字符串进行反转等。6.2.3 String类与StringBuffer类6.2.3 String类与StringBuffer类1. 字符串串联符 字符串串联符号“+”,支持进行String字符串的连接 Java提供了其他变量或对象到字符串的转换这一特殊支持,因此串联运算符也可以在String字符串与其他类型之间进行串联。 其优先级与结合性与算术运算符“+”相同 String s="你好",s1; s1="abc"+"def"; s1="abc"+s+3; s1="abc"+3+5 ; s1=3+5+"abc";字符串串联实际是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。 如:s1="abc"+s+3; 等价于: s1= new StringBuffer().append(“abc”).append(s).append(3).toString(); null2. String与StringBuffer类对象之间的转换【例6-6】 String与StringBuffer对象间的转换 import java.util.Scanner; public class Test{ public static void main(String args[]){ Scanner scan = new Scanner(System.in); String s=scan.next(); StringBuffer sb=new StringBuffer(s); sb.append(125); System.out.println(sb.toString()); } }null3. String与StringBuffer类的比较 两个类都是用来处理字符串。 String类和StringBuffer类的字符串内的字符索引都是以0开始。 两种都提供了一些相同的操作,如length,charAt,subString,indexOf,且他们在两个类中的用法也相同。 String类表示常量字符串,不可以改变;StringBuffer类表示可变字符串,提供了若干改变字符串的方法。 String类覆盖了Object类的equals方法,用来进行字符串内容的比较,而StringBuffer类没有覆盖equals方法,因此其只是做基本的引用的比较。null两个类都覆盖了Object类的toString方法,但各自的实现方式不一样,String类的toString方法返回当前String实例本身的引用,而StringBuffer类的toString方法返回一个以当前StringBuffer的缓冲区中的所有字符为内容的新的String对象的引用。 String类对象支持操作符“+”,而StringBuffer对象不支持操作符+,因此StringBuffer对象之间不能用“+”进行连接,StringBuffer对象与其他数据(除String对象)也不能进行“+”运算。 String类中的一些字符串变化操作,并不改变对象本身,而是创建一个新的String对象,返回值是新对象的引用。StringBuffer类的一些字符串变化操作会实际的改变对象本身,而返回值是这个对象的引用。 6.2.4 应用实例6.2.4 应用实例【例6-7】输入若干电话号码,直到输入quit结束,并将所有字符串用/分隔连接。 import java.util.Scanner; public class Test{ public static void main(String args[]){ String s; String s1="quit"; StringBuffer s2 = new StringBuffer(); Scanner scan = new Scanner(System.in); while(true) { s=scan.next(); if(s.equals(s1)) break; s2.append(s); s2.append('/'); } System.out.println(s2.toString()); } }6.3 字符串匹配与变换6.3 字符串匹配与变换字符串格式化 模式匹配与正则表达式6.3.1 字符串格式化6.3.1 字符串格式化String类的字符串格式化函数 public static String format( String format, Object... args) format:格式字符串 args:可以为多个参数,参数可以为各种类型(整型,字符型,浮点型,对象等) 将多个参数按格式字符串描述进行格式化。1. 格式字符串1. 格式字符串格式字符串format中可以包含两部分: (1)固定文本:即不需要转换的字符串,直接写到输出字符串中。 (2)格式说明符:固定文本中可以嵌入一个或多个格式说明符。格式说明符会指示引用后面的哪个参数并进行何种形式的格式处理产生对应的字符串,并嵌入在格式说明符所在的位置。 null格式说明符的语法如下: %[argument_index$][flags][width][.precision]conversion (1)‘%’为格式说明符的起始标志,用[ ]括起的部分表示可选。 (2)argument_index$为参数索引。如第一个参数为1$ ,第二个参数为2$。 (3)width表示最小宽度,表示转化的结果至少占用的字符宽度。 (4).precision表示精度,其并不是在所有情况下都能够使用,而主要用在浮点数的转换中进行浮点数精度限制,且其特定行为与convertion的取值有关。 (5)flags为标志。其提供了一套字符集合,其中不同的字符标志表示不同的格式设置方式,如对齐方式,填充方式等。但其应用受conversion的限制。 (6)conversion表示转换,其提供了一套字符集合,这些字符标志用于不同的参数类别,并表明了参数如何转换为字符(字符串)。2. 数据的格式化转换2. 数据的格式化转换整数的格式化 支持的转换方式conversion及含义为: d转换为十进制、o转换为八进制、x或X转换为十六进制。 支持的标志flag及含义: 整数可以有宽度(width)设置,但不能有精度(.precision)设置。例:String.format("%1$,09d", -3123) 返回结果:-0003,123nullnull浮点数格式化 支持的转换方式conversion及含义: e或E:十进制科学计数法格式。 f:十进制普通浮点数格式。 g或G:根据具体情况自动选择普通表示或科学计数法表示。 a或A:十六进制,有有效位数和指数。 支持的标志(flag)及含义: 浮点数可以有宽度(width)限制。 浮点数可以有精度(.precision)限制:对于浮点转换 'e'、和 'f',精度是小数点分隔符后的位数。如果转换是 'g' 或 'G',那么精度是舍入计算后所得数值的所有位数。如果转换是 'a' 或 'A',则不必指定精度。(实际上只有浮点数可以有精度限制例:String.format("%1$-10.2e,%2$-10.2f", 0.123456, 123.4567) 返回结果:1.23e-01 ,123.46nullnull字符格式化 支持的转换方式conversion及含义: c或C:结果为Unicode字符。 支持的标志flag及含义: -:表示左对齐。 可以使用宽度,但不能使用精度。例:String.format ( "%1$-3c*%2$-3cend",'A', 'B') 返回结果字符串:A *B endnull3. 转换conversion与标志flag的完整描述 4. Formatter类 Java还提供了一个进行字符串格式化的类Formatter类,需要的话可以查看相关文档。6.3.2 模式匹配与正则表达式 6.3.2 模式匹配与正则表达式 1. 正则表达式 正则表达式用来描述特定的字符串模式,当然其本身也是一个字符串,其中包含一些普通字符和特殊字符。普通字符在正则表达式中表示其本身的含义,而特殊字符具有特殊含义。 null(1)普通字符:如abc,是最简单形式的正则表达式,其表达的模式就是按顺序的三个字符abc。 (2)[ ]:[ ]表示选择,含义为选择[ ]内的任何一个字符。 null(3)^:^表示否,用在 [ ]内表示不能选择的字符。 (4)&&:&&表示与,用在[ ]内表示字符集合的交 (5)()以及|:()表示多个字符的选择范围,其内为用 “|“分隔的可选子字符串(可以为多个字符) null(6)重复次数:表示某个模式重复出现的次数, null(7)预定义字符:用一些简单符号表示预定义的一些字符模式, null如: (1)\d{4}等价于[0-9]{4}。 (2)独立的单词temp而不是嵌入于其他字符串中的temp \btemp\b (3)汉字字符(其表示的是汉字的Unicode码的区间) [\u4e00-\u9fa5] (4)身份证号码为15位或18位数字 ([0-9]{15}|[0-9]{18})null2. 字符串模式匹配 (1)匹配 public boolean matches( String regex) (2)替换 public String replaceAll( String regex, String replacement) public String replaceFirst( String regex, String replacement) (3)拆分 public String[] split( String regex) public String[] split( String regex, int limit) nullpublic String[] split( String regex) 字符串"boo:and:foo" 正则表达式为 “:” 结果为"boo","and"和"foo"。 正则表达式为“o” 结果为“b”,“”,“:and:f”,“”,“”, 但因为结果不包含结果空字符串,故结果为三个子字符串"b","",":and:f"。 public String[] split( String regex,int limit)null3. Pattern类与Matcher类 Pattern和Matcher是Java.util.regex包中的两个类。这两个类是Java提供的专门用来进行正则表达式模式匹配的类,而String类的几个方法相当于他们的简化版本了。使用Pattern和Matcher,会提供更多的选择,并可获得更高的效率。感兴趣的读者可以查阅Java的API文档了解它们的使用方法。6.3.3. 应用实例 6.3.3. 应用实例 【例6-8】判断一个字符串是否为满足格式要求的合法日期。要求格式为XXXX-XX-XX(年-月-日),若月、日不足两位要用0补足两位,如2005-01-25。" [12][0-9]{3}\\-[01][0-9]\\-[0-3][0-9] " "(19|20)[0-9]{2}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01])" nullpublic class Test{ public static void main(String args[]){ String str="1999-22-06"; String regex= "[12][0-9]{3}\\-[01][0-9]\\-[0-3][0-9]"; boolean b=str.matches(regex); System.out.println(b); } }null【例6-9】将一个用“/”分隔的电话号码字符串,如"13930868875/13833294326/15834567890"中的电话号码分别取出来。 public class Test{ public static void main(String args[]){ String str= "13930868875/13833294326/15834567890"; String s[]; s=str.split("/"); for(int i=0;i
本文档为【6字符串类[1]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_583624
暂无简介~
格式:ppt
大小:232KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2012-05-11
浏览量:11