




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Day15总结:1、 String类方法编程练习题:重点掌握思想 1,需求:将字符串中进行反转。abcde - edcba思路:1、因为反转,想到之前做个数组的反转的例子,1、 先将字符串转变为数组。2、 有了数组后直接进行头尾角标元素的位置置换即可3、 将数组转成字符串。步骤:1、 将字符串转成数组:toCharArray();2、 对数组进行位置置换swap()3、 将数组转成字符串,用字符串构造函数就可以了。实现代码:Public static void main(String arsg)String str=abcde;Str=reverseString(str);Sop(str);/对制定字符串进行反转。接收一个反转的字符串,返回反转后的字符串。Public static String reverseString(String str)/将字符串变成字符数组。Char chs=str.toCharArray();/这里对字串转成字符数组的方法应用还不是很熟悉,应该多花时间补。/对数组进行遍历完成头尾角标元素的置换。For(int start=0,end=chs.length-1;start abcdqrtx; 思路:1、 先把字符串变成数组2、 对数组元素进行排序3、 将数组变成字符串实现代码:Public static String sortString(String str)将字符串变成数组Char chs=getCharArray(str);对数组进行排序sortCharArray(chs);将排序后的数组变成字符串String temp=new String(chs);Return temp;/对字符数组进行排序Public static void sortCharArray(char chs)For(int x=0;xchs.length01;x+)For(int y=x+1;ychsy)Swap(chs,x .y)Swap()/在此省略不写Public static char getCharArray(String str)Char chs=str.toCharArray();Return chs;3、需求:获取一个字符串在另一个字符串中出现的 次数。 kk kksdfkkghkkjekkrtkk思路:1、 先要明确字符串中的是否有要查找的字串,如果有,应该记录该字串,的第一次出现的位置.2、 在第一位位置后,对剩余的字符串再次出现该字串查找,并获取位置,3、 以为类推,通过记录数完成字串出现次数的获取。步骤:1、 定义计数器2、 因为每一次出现的位置不同,所以定义变量记录位置。3、 通过indexof方法获取位置,同时该方法的好处就是可以通过-1判断是否存在。4、 只要存在,就循环查找,并计数,同时要获取查找后的剩余字符串,在剩余字符串继续查找,通过substring(start)就可以了,而start的值就是查找到的角标+字串的长度。实现代码:Public static int getSubStringCount(String str,String key)Int count=0;Int index=0;While(index=dex(key,index)!=-1)Index =index+key.length();Count+;Return count; 4,获取两个字符串最大相同子串。 xcvcctvb tyuicctvonmyui思路:1、对短的字串进行判断,用第一个角标元素和最后一个角标元素,也就是0到length()-1;如果没有,则缩短范围,1到length()-1;或者0到length()-2;依次这样下去,但是判断当了length()+1时就表示没有包含的字串。发现随着字符串比较次数的增加,每次判断的次数也在递增,所以可以用到大圈套小圈的原理实现代码:Public static String getMaxSubString(String s1,String s2)String max,min;定义两个字符串类型的变量max 和min用来记录参与比较的两个字符中那个较大的串,哪个是较小的字串。Max=s1.,length()s2.length()?s1:s2;Min=s1.equals(max)?s2:s1;用来判断哪个是较小的字串。For(int x=0;xmin.length();x+)For(int y=0,z=min,length()-x;z!=min.length()+1;y+,z+)/z=min.length()-x;用来控制字串缩小的范围,z!=min.,length()+1?String temp=min.substring(y,z);/获取字串Sop(temp);/打印字串If(max.contains(temp)/用contains方法来判断获取到字串是否在较大的串中存在。如果存在则返回这个串。Return temp;Return null;5、 对一个字符串去除两端的空格:思路:1、首先对字符串首尾进行判断,是否为空格,怎么去判断?就是拿出元素中的某个字符进行判断。首先要对字符串进行遍历,得用到字符串的长度length()方法,然后用charAt()来判断是否包含空。 2、如果首尾没有空格的时候就要获取字符串,substring(0,length();实现代码:Public static String Trim(String str)Int start=0,end=str.length()-1;While(startend&str.charAt(start)= )用charAt()方法来判断从首部开始的某个字符是否为空格。Start+;While(startend&str.charAt(end)= )/用charAt()方法来判断从尾部开始的某个字符是否为空格。End-;Return str.substring(start,end+1)/因为substring方法包含头不包含尾,所以要+1,保证取出来的字符串是完整的。 2、 Ecplise中package和outline的理解:Package:包资源管理器1、通过该视窗我们能清晰的知道当前工作空间中所有的项目,比如day14,可以通过点击它的下拉栏目src可以知道该项目中包含的源文件 ,同样可以通过包的下拉栏目可以知道源文件中包含哪些包,比如cn.itcast.string.demo以及cn.itcast.string.test包。同样可以通过查看每个包里面包含的源文件。2、可以直接在这个视窗中创建project、package、class、interface等。3、 在该视窗何总不能查看项目下的运行文件,也就是.class文件。Outline大纲视窗:1、通过该视窗可以知道当前代码中定义的类或者接口,还有所有的成员。2、我们可以通过该视窗查找代码中某一个类或者成员,因为它都很有层次结构的显示出了当前源码中构成结构,比如定义了哪些方法功能函数,定义哪些成员变量 ,通过在该视窗中双击它,就会在源码中标示出来选定。3、同时可以通过在该视窗中可以修改在代码中多处出现的名称。选定要要修改的右键选择refactor-rename进行修改,这样可以修改源码中所有出现的该名称的成员。还可以关联到使用到它的其他的代码中也一并修改。3、 开发技巧:将java中已有的功能封装成我们自有的方法,这样的话方便其他人对其进行使用。以及老师在用高级编译器的对注释小细节的用法。私有和非私有注释代码的写法。代码实现:4、 StringBuffer1、特点:i. 用于存储数据的容器(数组、对象、变量)其实存储的就是一个数组,把数组进行了封装,数组是没有方法的,只有一个属性length;ii. 该容器的长度是可变的,存储了字符串之后可以对字符串进行修改,但是字符串自身是不能修改的。iii. 该容器可以存储基本数据类型和引用型数据类型,注意:怎么理解可变长度数组?当一个数组超出了指定长度数组的长度时,这时就在容器中按照一定的规则创建另一个新数组,这时新创建的数组可能是原来数组长度的一倍或者其他,这时原数组会对新数组进行赋值,把之前装进数组中的数据赋值给新数组,超出了长度的部分再在存储在后面。如果明确了要操作的字符数的话就用StringBuffer(int capacity)明确长度的方法,这样就不用在数组中不断创建新数组了。2、 功能:i. 添加:1. 添加在尾部:StringBuffer append();不支持byte和short数据类型,其他的都支持,但是也可以使用,因为支持int,这样可以自动类型提升。Eg:StringBuffer sb=new StringBuffer();StringBuffer s1=sb.append(ab);StringBuffer s2=sb.append(cd);sop(s2=sb)true为什么?因为在stringBuffer缓冲区中始终只有一个容器。相当于:sb.append(ab).append(cd);添加到指定的位置:2. 添加到固定位置:StringBuffer insert(index,data)在指定位置添加指定的数据Eg:sb.append(ab).append(cd).insert(1,kk);结果akkbcd一定要注意不是abkkcd,是指定在1角标处添加,之前1角标处的元素向后顺延。ii. 删除:1. StringBuffer delete(int start,int end)一般情况下有头有尾的通常情况下不包含尾,2. StringBuffer deleteCharAt(index)删除指定位置的字符。Eg:sb.deleteCharAt(3);/结果akkcd,B没有了。sb.delete(1,4);acd 包含1不包含4清除缓冲区:好处:缓冲区不变,可以重复使用。sb.delete(0,sb.length();sb=new StringBuffer();这也是清除缓冲区的另一方式。哪一种好?第一种把缓冲区的东西全部删除。第二种是重新创建一个空间占用内存,第一种好sb.setLength(2);结果:ak 保留缓冲区的长度,同样可以用来清除缓冲区sb.setLength(0);结果为空。同样可以清除缓冲区。iii. 查找:char CharAt(index);int indexOf(str);int lastIndexOf(str);iv. 修改:1. Void setCharAt(index,chs);修改指定位置的字符。Eg: sb.setCharAt(2,p);结果为akpbcd2. StringBuffer replace(start,end,str)Eg:sb.replace(1,3,cctv)acctvbcd 还是包含头不包含尾,把KK替代了。3. Reverse();反转Eg:StringBuffer sb2=new StringBuffer(abcdef);sb2.reverse();/fedcbas3、 StringBuffer和数组的区别:a) 数组是固定长度的,字符串缓冲区是可变长度的。b) 数组中的元素类型是固定的同一类型,字符串缓冲区是任意的,也可以是同一类型。c) 数组对象只有一个length属性通过角标操作数组中的元素,而字符串缓冲区是通过一系列的方法对字符串进行操作。d) 数组中的元素可以通过角标直接进行访问,而字符串缓冲区元素通常操作后要通过toString变成字符串使用。Eg:将一个整数数组变成字符串,格式:元素1,元素2,.pubic static String arrayToString(int arr)String str=;for(int x=0;xarr.length;x+)if(x!=arr.length-1)str=str+arrx+, ;elsestr=str+arrx+rteurn str;方法二:pubic static String arrayToString2(int arr)StringBuffer sb=new StringBuffer();sb.append();for(int x=0;xarr.length;x+)if(x!=arr.length-1)str=str+arrx+, ;elsestr=str+arrx+rteurn sb.toString();总结:第二种方式,产生的字符串全部都装在了stringBuffer里面,不用产生很多的字符串,后面直接返回一个字符串就可以了。然而第一种是不断的产生新的字符串。4、 StringBuilder:特点:是jdk1.5版本出现后的新特性,可以替代StringBuffer,但是二者是有区别的:1、 StringBuilder是线程不同步的,StringBuffer是线程同步的。2、 二者用法相同,但是StringBuilder效率较StringBuffer高。在开发单线程时用StringBuilder。3、 提高效率的原理是单线程,没有锁的机制。操作容器的方法很多,增删改查,如果一个线程在添加,一个线程在删除,这样就降低了效率,在一个添加时不能删除,此时使用的是同一个锁,只要以判断锁就在消耗资源。实现代码:StringBuilder s1=new StringBuilder(hello);StringBuilder S2=new StringBuilder(java);Method(s1,s2);Method(String s1,String s2)S1.append(s2);S1=s2;输出结果:hello java java内存分析:分析:基本步骤就不再多说,这里最主要的是,s2.append(s2),在内存中是怎么样实现的,就是说把s2的字符串内容添加到s2中,此时s1在内存中的对象值为hello java。s1=s2是指将s2的内存空间地址复制给s1此时s1指向了s2.当method方法结束后,弹栈,打印主函数中s1和s2此时s1还是指向堆内存中的s1对象值为:hello java s2指向的还是堆内存中的s2对内存中的内容为java5、 基本数据类型的对象包装类Byte-ByteShort-ShortInt-IntergerChar-CharacterLong-LongDouble-DoubleFloat-Floatboolean-Boolean5.1把基本数据类型封装成对象的好处:可以在对象中定义更多的属性和行为对基本数据类型进行操作。比如:整数的范围,如果整数被封装成为对象,那么取值范围当然是对象自己最清楚。所以只要调用对象中的属性和行为即可。5.2常见的操作:不懂,没有大概的体系?思路不清晰!1、sop(Integer.parseInt(21)+4)/结果25parseInt()这个方法只能往里面传的是有效的数字格式字符串。2、对于其他的数据类型的字符串转换方式都一样的。xxx a=Xxx.parseXx(XxxString)int a=Interger.parseInt(23);long a=Long.parseLong(345);boolean a=Boolean.parseBoolean(true);有一种类型没有parse方法:Character,因为它就是字符类,不需要去转换,可以对指定的字符转成大小写。3、怎么将整数转成字符串呢?int num=4;s=Integer.toString(num);4、如何将一个整数数值封装成对象呢?通过构造函数。还可以通过静态方法。valueof的形式。new Integer(4);new Integer(34353);Integer i1=new Integer(4);Integer i2=new Integer(4);sop(i1=i2);false 比较的是地址值sop(i1.equals(s2);true只比较里面的数值的大小。5、将其他进制转成十进制。int x=Interger.parseInt(110,2);2代表的是用什么进制来解析,这里就是说110是用二进制来解析的代表6sop(x+1);结果为76、怎么将整数对象转成整数呢?使用IntValue()int y=Value();sop(y+1);结果为5,6、 自动拆箱和自动装箱:Jdk1.5版本后对基本数据类型对象包装类进行了升级,可以像操作基本数据类型一样操作基本数据类型对象。Eg:integer z=4;在此4是一个对象,进行了自动装箱Z=new Interger(4);Z=z+5;这里进行自动拆箱过程,它等价于z=new Integer(Value()+5);注意:在书写时,要注意Z可以取的值多了一个null,要对它进行判断。实现代码:Integer m=128;Integer n=128;Integer m1=new Integer(128);integer n1=new Integer(128);m1=n1?falsem=n?false当换成127时,m=n true 为什么?如果自动装箱的数据在byte范围之内,同样的数据不再单独开辟空间。7、 练习:1、要求:34 9 -1 78 3 22对字符串中的数值进行从小到大的排序,变成一个数值有序的字符串。-1 3 9 22 34 78 参考BaseTypeTest.java实现代码:思路:1、看到了排序,想到了数组2、 发现数组中的元素都在字符串中,怎么获取字符串中的这些数据呢?3、 发现这些数据之间都用空格分隔,可以通过字符串对象的方法进行分割4、 对于分割完成的字符串是一个字符串数组。5、 将字符串数组转成Int数组。6、 将对int数组进行排序。7、 将int数组变成字符串。Public class BaseTypeTestPrivate static final String SEPARATOR= ;这里为什么要定义常量?因为下面的代码中有几次都用 这个字符串。为了体现其专业性,以及更好的把前面学习到的知识结合起来,就将它用final修饰。Public static void main(String args)String str=34 9 -1 78 3 22;Str=sortNumberString(str);Sop(str);Public static String sortNumberString(String str)1、 将字符串进行切割String nums=getNumberStringArray(str);2、 将字符串数组转成int数组Int arr=StringArrayToIntArray(nums);3、 对int数组进行排序sortIntArray(arr);4、 将int数组变成字符串String temp=intArrayToString(arr);Return temp;Public static String getNumberStringArray(String str)Return str.split(SEPARATOR);Private static int StringArrayToIntArray(String nums)Int arr=new intnums.length;For(int x=0;xnums.length;x+)Arrx=Interger.parseInt(numsx);Return arr;Priavte static void sortIntArray(int arr)Arrays.sort(arr);Private static String intArrayToString(int arr)StringBuilder sb=new StringBuilder();For(iint x=0;xarr.length;x+)If(x!=arr.length=-1)Sb.appen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国土安全考试题库及答案
- 三年级下册读书分享范例
- 2025年房屋抵债合同模板
- 电脑系统安全知识培训课件
- 2025年国有企业土地使用权转让合同协议
- 电脑基础知识公益培训课件
- 电脑办公基础技术知识培训课件
- 电能知识培训课件
- 电网监控知识培训总结课件
- 电网业务基础知识培训总结课件
- 2025年水务公司竞聘部门负责人笔试试题及答案
- 实例要素式暂时解除乘坐飞机、高铁限制措施申请书(申请单次解禁用)
- 旅游英语视听说教学课件
- 患者沟通与心理护理
- 合规培训课件
- 2025年4月自考00842第二外语(德语)试题
- 2025护士相关法律法规培训
- 后人类主义剧场实践-洞察及研究
- 自助快餐厅管理制度
- 椎动脉支架植入护理查房
- 2024安徽水利考试试题及答案
评论
0/150
提交评论