版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Day15总结:String类方法编程练习题:重点掌握思想1,需求:将字符串中进行反转。abcde-->edcba思绪:1、由于反转,想到之前做个数组的反转的例子,先将字符串转变为数组。有了数组后直接进行头尾角标元素的位置置换即可将数组转成字符串。环节:将字符串转成数组:toCharArray();对数组进行位置置换swap()将数组转成字符串,用字符串构造函数就可以了。实现代码:Publicstaticvoidmain(String[]arsg){Stringstr="abcde";Str=reverseString(str);Sop(str);}//对制定字符串进行反转。接受一个反转的字符串,返回反转后的字符串。PublicstaticStringreverseString(Stringstr){//将字符串变成字符数组。Char[]chs=str.toCharArray();//这里对字串转成字符数组的方法应用还不是很熟悉,应当多花时间补。//对数组进行遍历完毕头尾角标元素的置换。For(intstart=0,end=chs.length-1;start<end;start++,end--){Swap(chs,start,end);}ReturnnewString(chs);}//对字符串进行位置置换。Swap()2、需求:对字符串中的字母进行排序,变成有序的字符串。ﻩﻩ"bdacxrtq"-->"abcdqrtx";思绪:先把字符串变成数组对数组元素进行排序将数组变成字符串实现代码:PublicstaticStringsortString(Stringstr){将字符串变成数组Char[]chs=getCharArray(str);对数组进行排序sortCharArray(chs);将排序后的数组变成字符串Stringtemp=newString(chs);Returntemp;}//对字符数组进行排序PublicstaticvoidsortCharArray(char[]chs){For(intx=0;x<chs.length01;x++)
{For(inty=x+1;y<chs.length;y++){If(chs[x]>chs[y])Swap(chs,x.y)}}}Swap()//在此省略不写Publicstaticchar[]getCharArray(Stringstr){Char[]chs=str.toCharArray();Returnchs;}3、需求:获取一个字符串在另一个字符串中出现的次数。ﻩ "kk""kksdfkkghkkjekkrtkk"思绪:先要明确字符串中的是否有要查找的字串,假如有,应当记录该字串,的第一次出现的位置.在第一位位置后,对剩余的字符串再次出现该字串查找,并获取位置,认为类推,通过记录数完毕字串出现次数的获取。环节:定义计数器由于每一次出现的位置不同,所以定义变量记录位置。通过indexof方法获取位置,同时该方法的好处就是可以通过-1判断是否存在。只要存在,就循环查找,并计数,同时要获取查找后的剩余字符串,在剩余字符串继续查找,通过substring(start)就可以了,而start的值就是查找到的角标+字串的长度。实现代码:PublicstaticintgetSubStringCount(Stringstr,Stringkey){Intcount=0;Intindex=0;While((index=str.intdex(key,index))!=-1)Index=index+key.length();Count++;}Returncount;4,获取两个字符串最大相同子串。ﻩ"xcvcctvb""tyuicctvonmyui"思绪:1、对短的字串进行判断,用第一个角标元素和最后一个角标元素,也就是0到length()-1;假如没有,则缩短范围,1到length()-1;或者0到length()-2;依次这样下去,但是判断当了length()+1时就表达没有包含的字串。发现随着字符串比较次数的增长,每次判断的次数也在递增,所以可以用到大圈套小圈的原理实现代码:PublicstaticStringgetMaxSubString(Strings1,Strings2){Stringmax,min;定义两个字符串类型的变量max和min用来记录参与比较的两个字符中那个较大的串,哪个是较小的字串。Max=s1.,length()>s2.length()?s1:s2;Min=s1.equals(max)?s2:s1;用来判断哪个是较小的字串。For(intx=0;x<min.length();x++){For(inty=0,z=min,length()-x;z!=min.length()+1;y++,z++)//z=min.length()-x;用来控制字串缩小的范围,z!=min.,length()+1???
{Stringtemp=min.substring(y,z);//获取字串Sop(temp);//打印字串If(max.contains(temp))//用contains方法来判断获取到字串是否在较大的串中存在。假如存在则返回这个串。{Returntemp;}}}Returnnull;}对一个字符串去除两端的空格:思绪:1、一方面对字符串首尾进行判断,是否为空格,怎么去判断?就是拿出元素中的某个字符进行判断。一方面要对字符串进行遍历,得用到字符串的长度length()方法,然后用charAt()来判断是否包含空。2、假如首尾没有空格的时候就要获取字符串,substring(0,length());实现代码:PublicstaticStringTrim(Stringstr){Intstart=0,end=str.length()-1;While(start<end&&str.charAt(start)=="")用charAt()方法来判断从首部开始的某个字符是否为空格。Start++;While(start<end&&str.charAt(end)=="")//用charAt()方法来判断从尾部开始的某个字符是否为空格。End--;Returnstr.substring(start,end+1)//由于substring方法包含头不包含尾,所以要+1,保证取出来的字符串是完整的。}Ecplise中package和outline的理解:Package:包资源管理器1、通过该视窗我们能清楚的知道当前工作空间中所有的项目,比如day14,可以通过点击它的下拉栏目src可以知道该项目中包含的源文献,同样可以通过包的下拉栏目可以知道源文献中包含哪些包,比如cn.itcast.string.demo以及cn.itcast.string.test包。同样可以通过查看每个包里面包含的源文献。ﻩ2、可以直接在这个视窗中创建project、package、class、interface等。在该视窗何总不能查看项目下的运营文献,也就是.class文献。Outline大纲视窗:1、通过该视窗可以知道当前代码中定义的类或者接口,尚有所有的成员。ﻩ2、我们可以通过该视窗查找代码中某一个类或者成员,由于它都很有层次结构的显示出了当前源码中构成结构,比如定义了哪些方法功能函数,定义哪些成员变量,通过在该视窗中双击它,就会在源码中标示出来选定。 3、同时可以通过在该视窗中可以修改在代码中多处出现的名称。选定要要修改的右键选择refactor--rename进行修改,这样可以修改源码中所有出现的该名称的成员。还可以关联到使用到它的其他的代码中也一并修改。开发技巧:将java中已有的功能封装成我们自有的方法,这样的话方便其别人对其进行使用。 以及老师在用高级编译器的对注释小细节的用法。私有和非私有注释代码的写法。代码实现:StringBuffer1、特点:用于存储数据的容器(数组、对象、变量)其实存储的就是一个数组,把数组进行了封装,数组是没有方法的,只有一个属性length;该容器的长度是可变的,存储了字符串之后可以对字符串进行修改,但是字符串自身是不能修改的。该容器可以存储基本数据类型和引用型数据类型,注意:怎么理解可变长度数组?当一个数组超过了指定长度数组的长度时,这时就在容器中按照一定的规则创建另一个新数组,这时新创建的数组也许是本来数组长度的一倍或者其他,这时原数组会对新数组进行赋值,把之前装进数组中的数据赋值给新数组,超过了长度的部分再在存储在后面。假如明确了要操作的字符数的话就用StringBuffer(intcapacity)明确长度的方法,这样就不用在数组中不断创建新数组了。功能:添加:添加在尾部:StringBufferappend();不支持byte和short数据类型,其他的都支持,但是也可以使用,由于支持int,这样可以自动类型提高。Eg:StringBuffersb=newStringBuffer();StringBuffers1=sb.append("ab"); ﻩStringBuffers2=sb.append("cd");ﻩﻩ sop(s2==sb)true ﻩﻩﻩ为什么?由于在stringBuffer缓冲区中始终只有一个容器。ﻩﻩ相称于:sb.append("ab").append("cd");添加到指定的位置:添加到固定位置:StringBufferinsert(index,data)在指定位置添加指定的数据Eg:sb.append("ab").append("cd").insert(1,"kk");结果akkbcd一定要注意不是abkkcd,是指定在1角标处添加,之前1角标处的元素向后顺延。删除:StringBufferdelete(intstart,intend)一般情况下有头有尾的通常情况下不包含尾,StringBufferdeleteCharAt(index)删除指定位置的字符。Eg:sb.deleteCharAt(3);//结果akkcd,B没有了。sb.delete(1,4);acd包含1不包含4清除缓冲区:好处:缓冲区不变,可以反复使用。sb.delete(0,sb.length());sb=newStringBuffer();这也是清除缓冲区的另一方式。哪一种好?第一种把缓冲区的东西所有删除。第二种是重新创建一个空间占用内存,第一种好 sb.setLength(2);结果:ak保存缓冲区的长度,同样可以用来清除缓冲区sb.setLength(0);结果为空。同样可以清除缓冲区。查找:charCharAt(index); ﻩﻩ intindexOf(str); intlastIndexOf(str);修改:VoidsetCharAt(index,chs);修改指定位置的字符。Eg:sb.setCharAt(2,'p');结果为akpbcdStringBufferreplace(start,end,str)Eg:sb.replace(1,3,"cctv")acctvbcd还是包含头不包含尾,把KK替代了。Reverse();反转Eg:StringBuffersb2=newStringBuffer("abcdef");ﻩsb2.reverse();//fedcbasStringBuffer和数组的区别:数组是固定长度的,字符串缓冲区是可变长度的。数组中的元素类型是固定的同一类型,字符串缓冲区是任意的,也可以是同一类型。数组对象只有一个length属性通过角标操作数组中的元素,而字符串缓冲区是通过一系列的方法对字符串进行操作。数组中的元素可以通过角标直接进行访问,而字符串缓冲区元素通常操作后要通过toString变成字符串使用。Eg:将一个整数数组变成字符串,格式:[元素1,元素2,...] ﻩpubicstaticStringarrayToString(int[]arr)ﻩﻩ{ ﻩﻩStringstr=""; for(intx=0;x<arr.length;x++) ﻩﻩ{ﻩﻩ if(x!=arr.length-1) ﻩstr=str+arr[x]+","; ﻩelse ﻩ str=str+arr[x]+"]"ﻩ ﻩ} ﻩ rteurnstr;ﻩﻩ} ﻩ方法二:ﻩﻩpubicstaticStringarrayToString2(int[]arr) ﻩ{ﻩﻩ StringBuffersb=newStringBuffer(); ﻩﻩsb.append("["); ﻩfor(intx=0;x<arr.length;x++) ﻩﻩ{ﻩ ﻩﻩif(x!=arr.length-1)ﻩ ﻩstr=str+arr[x]+",";ﻩ ﻩ elseﻩﻩﻩﻩstr=str+arr[x]+"]" ﻩ} ﻩﻩrteurnsb.toString();ﻩ }ﻩﻩ总结:第二种方式,产生的字符串所有都装在了stringBuffer里面,不用产生很多的字符串,后面直接返回一个字符串就可以了。然而第一种是不断的产生新的字符串。StringBuilder:特点:是jdk1.5版本出现后的新特性,可以替代StringBuffer,但是两者是有区别的:StringBuilder是线程不同步的,StringBuffer是线程同步的。两者用法相同,但是StringBuilder效率较StringBuffer高。在开发单线程时用StringBuilder。提高效率的原理是单线程,没有锁的机制。操作容器的方法很多,增删改查,假如一个线程在添加,一个线程在删除,这样就减少了效率,在一个添加时不能删除,此时使用的是同一个锁,只要以判断锁就在消耗资源。实现代码:StringBuilders1=newStringBuilder("hello");StringBuilderS2=newStringBuilder("java");Method(s1,s2);Method(Strings1,Strings2){S1.append(s2);S1=s2;}输出结果:hellojavajava内存分析:分析:基本环节就不再多说,这里最重要的是,s2.append(s2),在内存中是怎么样实现的,就是说把s2的字符串内容添加到s2中,此时s1在内存中的对象值为hellojava。s1=s2是指将s2的内存空间地址复制给s1此时s1指向了s2.当method方法结束后,弹栈,打印主函数中s1和s2此时s1还是指向堆内存中的s1对象值为:hellojavas2指向的还是堆内存中的s2对内存中的内容为java基本数据类型的对象包装类Byte---ByteShort--ShortInt----IntergerChar---CharacterLong---LongDouble-DoubleFloat--Floatboolean-Boolean5.1把基本数据类型封装成对象的好处:可以在对象中定义更多的属性和行为对基本数据类型进行操作。比如:整数的范围,假如整数被封装成为对象,那么取值范围当然是对象自己最清楚。所以只要调用对象中的属性和行为即可。5.2常见的操作:不懂,没有大约的体系?思绪不清楚!1、sop(Integer.parseInt("21")+4)//结果25ﻩparseInt()这个方法只能往里面传的是有效的数字格式字符串。 2、对于其他的数据类型的字符串转换方式都同样的。 xxxa=Xxx.parseXx(XxxString) inta=Interger.parseInt("23");ﻩlonga=Long.parseLong("345");ﻩbooleana=Boolean.parseBoolean("true");ﻩ有一种类型没有parse方法: Character,由于它就是字符类,不需要去转换,可以对指定的字符转成大小写。ﻩ3、怎么将整数转成字符串呢?ﻩintnum=4; s=Integer.toString(num);ﻩ4、如何将一个整数数值封装成对象呢?通过构造函数。还可以通过静态方法。valueof的形式。ﻩnewInteger(4); newInteger("34353"); Integeri1=newInteger(4); Integeri2=newInteger("4");ﻩsop(i1==i2);false比较的是地址值 sop(i1.equals(s2));true只比较里面的数值的大小。 5、将其他进制转成十进制。 intx=Interger.parseInt("110",2);2代表的是用什么进制来解析,这里就是说110是用二进制来解析的代表6ﻩsop(x+1);结果为7 6、怎么将整数对象转成整数呢?ﻩ使用IntValue() inty=i1.intValue();sop(y+1);结果为5,自动拆箱和自动装箱:Jdk1.5版本后对基本数据类型对象包装类进行了升级,可以像操作基本数据类型同样操作基本数据类型对象。Eg:integerz=4;在此4是一个对象,进行了自动装箱Z=newInterger(4);Z=z+5;这里进行自动拆箱过程,它等价于z=newInteger(z.intValue()+5);注意:在书写时,要注意Z可以取的值多了一个null,要对它进行判断。实现代码:Integerm=128;ﻩIntegern=128; Integerm1=newInteger(128);ﻩintegern1=newInteger(128); m1==n1?falseﻩm=n?false当换成127时,m==ntrue为什么?假如自动装箱的数据在byte范围之内,同样的数据不再单独开辟空间。练习:1、规定:"349-178322"对字符串中的数值进行从小到大的排序, 变成一个数值有序的字符串。ﻩ-139223478参考BaseTypeTest.java实现代码:思绪:1、看到了排序,想到了数组发现数组中的元素都在字符串中,怎么获取字符串中的这些数据呢?发现这些数据之间都用空格分隔,可以通过字符串对象的方法进行分割对于分割完毕的字符串是一个字符串数组。将字符串数组转成Int数组。将对int数组进行排序。将int数组变成字符串。PublicclassBaseTypeTest{PrivatestaticfinalStringSEPARATOR="";这里为什么要定义常量?由于下面的代码中有几次都用""这个字符串。为了体现其专业性,以及更好的把前面学习到的知识结合起来,就将它用final修饰。Publicstaticvoidmain(String[]args){Stringstr="349-178322";Str=sortNumberString(str);Sop(str);}PublicstaticStringsortNumberString(Stringstr)ﻫ {将字符串进行切割String[]nums=getNumberStringArray(str);将字符串数组转成int数组Int[]arr=StringArrayToIntArray(nums);对int数组进行排序sortIntArray(arr);将int数组变成字符串Stringtemp=intArrayToString(arr);Returntemp;}PublicstaticString[]getNumberStringArray(Stringstr){Returnstr.split(SEPARATOR);}Privatestaticint[]StringArrayToIntArray(String[]nums){Int[]arr=newint[nums.length];For(intx=0;x<nums.length;x++){Arr[x]=Interger.parseInt(nums[x]);}Returnarr;}PriavtestaticvoidsortIntArray(int[]arr)ﻫ {Arrays.sort(arr);}PrivatestaticStringintArrayToString(int[]arr){StringBuildersb=newStringBuilder();For(iintx=0;x<arr.length;x++){If(x!=arr.length=-1)Sb.append(arr[x]+SEPARATOR);ElseSb.append(arr[x]);}Returunsb.toString();}}练习2:需求:对一个字符串数组进行字典书序从小到大的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年重庆考客运资格证
- 2024成品采购合同范文
- 2024技术开发合同模板
- 2024物业保洁员工用工合同
- 2024工程装饰合同范文
- 垃圾分类培训会议记录三篇
- 2024标准产品买卖合同书
- 2024建行外汇借款合同范本
- 深圳大学《油料与谷物科学原理》2022-2023学年第一学期期末试卷
- 艾草委托代工合同范本(2篇)
- 2024年吊车使用协议(一年期)
- 水电站管护协议书范文范本
- 酒店直播方案
- 安徽省合肥市第五十中学西校区2024-2025学年期中考试七年级数学试题(无答案)
- 湖北省恩施市沙地初中2024-2025学年八年级数学上学期期中考试题卷(含答案)
- 国开2024年秋《大数据技术概论》形考作业1-4答案
- 旅游景区旅游安全风险评估报告
- 部编2024版历史七年级上册第三单元《第14课 丝绸之路的开通与经营西域》说课稿
- 合同模板 交税
- 人音版音乐三年级上册全册教案
- 2024年新人教版四年级数学上册《第5单元第1课时 平行与垂直》教学课件
评论
0/150
提交评论