String类

1.String 类:

java用于描述字符串数据的对象。

特点:String类型一旦初始化就不能再被赋值,因为是常量。字符串存储在字符串常量池中,实现数据共享。
常量池的好处:不用每次都开辟空间,每次创建字符串对象之前,都会在字符串常量池中查找,如果有,就直接获取其地址,若没有则创建一个,方便下次使用。

2. "abcd"和new String("abcd")的区别:

"abcd":在字符串常量池中创建的一个"abcd"对象;
 new String("abcd"):在堆内存通过new创建了一个String类型的对象且在常量池中创建了一个"abcd"对象,并称其地址传给了堆内存new对象的构造函数。

记住:一般比较对象用的都不是==,而是equals,string重写equals方法,定义了自己对象相同的比较方式。用来比较字符串是否相同。


3.String类中的常见方法
   
  indexOf(str,fromindex): 获取子串str在字符串从索引fromindex开始第一次出现的位置;
  
  length(): 获取字符串的长度;
  
  charAt(int a): 某位置上的字符;
  
  indexOf(char):获取字符char在字符串中第一次出现的位置;
  
  replace(str,key):用字符串str来替换字符串中的一部分字符串key;
  
  replace(target,replacement):用replacement来替换目标位置target的字符串;
 
  subString(begin,end):取出begin到end间的一部分字符串;取出的是begin到end-1的值;
  
  tocharArray():将字符串变成很多字符;返回char[];
 

  LastindexOf():从后往前获取第一次出现的位置,但角标还是从前往后的。

4.通过练习学习String类的方法。
  
  1.练习一:两个字符串的最大相同子串。
 
  思路:
  
  1.通过字符串的长度来判断长串和短串;
  2.获取短串的所有子串(也可以获取长串的子串,只是相对效率较低);
  3.再判断从长到短的子串是否包含于长串中,如果包含在其中,则返回该子串。
  
  包含的方法:
  length():获取字符串的长度,返回值类型int。
  substring(i,j):获取字符串i角标到j-1角标的子串,返回值类型为String。
  contains(s):判断字符串s是否包含在另一字符串中,返回值类型为boolean。
 
  2.练习二:将字符串按自然顺序排序。
 
  思路: 1.以前学过数组排序,所以先将字符串转为一个字符数组;
   2.对字符数组中的元素进行排序,和整型数组元素排序差不多,比大小;
   3.最后再将字符数组转为一个新的字符串。
 
   或者直接用Arrays类的方法sort快速排序,效率最高。
  
  包含的方法:
  toCharArray():将字符串转为字符数组,返回char[] 类型。
  new String(char[] ch):将一个字符数组转为新的字符串;
  copyValueOf(char[] ch):返回数组组成的新字符串;返回类型是String;
  valueOf(char[] ch):返回数组组成的新字符串;返回类型是String;
  或者直接用Arrays.sort(char[] ch);
  
  3.练习三:将字符串反转,如absdf-->fdsba.
  
  思路:将字符串中的字符进行头尾置换,头自增,尾自减,直到头>尾结束置换,再返回字符串。
  
  包含的方法:
  charAt(int index):返回index角标的字符。
 
  4.练习四:对字符串数组进行排序。
  
  思路:和整型数组排序是一样的,通过String类的compareTo方法来比较字符串的大小,如果结果大于0,则交换位置。
  
   包含的方法:compareTo(String s):返回值为int型。
  
  5.练习五:对字符串数组取最值。
  
  思路:先定义一个max来存储最大值的角标,初始化为0,然后通过比较compareTo方法将数组中
  的每个元素与最大值比较,其它和整型数组中求最值一样。
  
  使用的方法:compareTo(String s):返回值为int型。
  
  5.字符串缓冲区StringBuffer
 
  1.特点: 1.它是一个容器,可以存储任意类型的数据元素;
  2.它的长度是可变的;
  3.内部有synchronized,可用于多线程同步,安全;
  4.可以对其中存入的内容和长度进行修改;
  5.具备容器的基本方法:添加、删除、修改、获取;
  6.里面的数据最终还是会转成字符串数据给别人使用。
  
  2.基本方法:
  
  添加: append(Object obj):添加obj到StringBuffer中已有数据的后面;
  如:

				StringBuffer sb=new StringBuffer();   
				  sb.append("df").append(98).append('d');
				insert(index,obj)://将obj插入到角标为index处,返回一个新的字符串。

  如:sb.insert(2,"dfs");
  
  删除:delete(start,end):删除角标为start到end-1之间的字符串;
  需要注意的是:若end>count,则默认为end=count;若start<0,则抛出异常。
  如:sb.delete(0,sb.length):清空缓冲区;
  
  deleteCharAt(index):删除index角标处的单个字符。
  如:sb.deleteCharAt(3);
 
  修改:replace(start,end,str):用str替换角标为start到end-1的一部分字符串;
  如:sb.replace(1,3,"ds");
 
  setCharAt(index,str):将index处的字符用str替换,即替换单个字符;返回类型为void;
  如:sb.setCharAt(2,"ds");
  
  获取:indexOf(s):获取s在另一个字符串中的位置,返回int类型;
   length():获取字符串的长度;
   setLength(i):设置字符串的长度为i;如:setLength(0):清空缓冲区。
   reverse():反转字符串;
  等等方法。
  
   思考题:既然数组和StringBuffer都是容器,有什么区别?
       区别: 1.数组长度是固定的,而StringBuffer的长度是可变的;
    2.数组一旦定义必须明确存储的元素类型,而StringBuffer存储的是任意类型的;
   3.数组可以通过索引获取元素,而StringBuffer在调用时,只能将其转成字符串,无法直接使用其中单个元素。
  
  3.StringBuffer内部原理:
  1.其实该类中用于存储数据的容器就是数组,类型为char,调用的时候转成字符串再使用;
  2.内部是一个长度可变的数组;
  数组长度可变原理:创建StringBuffer对象时,就会建立一个数组实体,长度是16个字符,如果超出16个字符,就会新创建一个
   长度规律增长的数组,将原数组的元素复制到新的数组,并将新元素添加到新数组中。
  
  4.使用条件:只要有多种类型的数据,并最终要变成字符串,就可以使用StringBuffer。
  
  6.SringBuilder:出现在JDK1.5版本后。
  StringBuffer和StringBuilder的区别:
  StringBuffer:能用于多线程,同步安全,但效率低,适用于多线程;
  StringBuilder:用于单线程不同步,但效率高,适用于单线程。
  
7.基本数据类型对象包装类
  共八中基本数据类型:byte,int,char,long,float,double,short,boolean.
  
  1.最常用的Integer:被final修饰,不能再被继承。
  将int类型封装成对象,作用之一是提供了能在int类和String类型之间相互转换的方法。
  
      ★ 基本数据类型base-->字符串
    1.通过+"";
    2.通过String类的valueOf(base)方法;
    3.通过Integer类中的构造函数+toString();如:Integer i=new Integer("12");i.toString();
    4.通过Integer类中的静态函数 toString(base);如:Integer.toString(3);
   
      ★ 字符串-->基本数据类型base
    1.通过Integer类的构造函数+intValue();
    2.通过Integer类的静态方法 parseInt(str);
    注意:这里的str只能是数字格式的字符串,如果不是,则会抛出异常,但是又没处理,所以继承了RuntimeException,
      不用标识出来,标识出来是因为可以处理,预先给出处理方案。
    parseInt(str):可以将其他进制转换为十进制,因为默认为十进制。
    parseInt(str,基数):标示str为基数进制的数字格式字符串。
    
  2.基类对象包装类的特性(JDK1.5后):
  ★ 自动装箱拆箱:
  
  如:Integer i=new Integer(3);
  可以写成Integer i=3;这就叫自动装箱,在内部实现了Integer.valueOf(3),将3变成了一个对象赋给i;
 
  i=i+3;这叫自动拆箱;在内部先将对象i转为整数即i.intValue(),这时再加3,自动拆箱过程;
  全写:Integer i=Integer.valueOf(i.intValue()+3);
 
  作用:简化书写,但有弊端。
  弊端:如果Integer i=null; i就不能调用intValue方法了,会编译失败。
  注意:自动装箱时,如果参数在byte范围[-128,127]内,则valueOf方法返回同一个对象,否则返回一个新的对象。
  如:

				 Integer i=128;
  				Integer j=128;
  				System.out.println(i==j);
  //结果为false,因为128不在byte范围[-128,127]内,所以i和j都各自返回一个新的对象。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值