黑马程序员----十五-StringBuffer

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

==========================================
15-01-01
==========================================

1.String类的特点:
  字符串对象一旦被初始化,就不会被改变了.
  String s ="abc";
  s="nba";
  sysout(s)
  s是不变的,变的是s指向的是谁.

2.String s和String s1,s==s1的结果为true.
  字符串创建的时候都会在字符串常量池中.s1建立的时候,常量池中已经有了,那么就把已经有的"abc"的地址值给s1,所以s和s1指向的是同一个"abc".存储在字符串常量池中,也叫字符串缓冲区.

3.String s1=new String("abc");
  这时候s和s1就为false了,s1是在堆中创建了两个对象.s在字符串常量池中创建了一个abc字符串,s1是在堆内存中用new的方式创建了一个String对象,然后在构造的时候,接收了一个abc字符串,
  equals比较的是地址值,但是把equals复写了,所以只比较内容.
 
==========================================
15-01-02
==========================================

1.String s=new String();
等效于String s="";
不等效于String s=null;

2.new String(arr,1,3)是从1开始取3个.

3.按照面向对象的思想对字符串进行功能分类.
    1.获取
 1.1获取字符的个数(长度).返回int
字符数组也有length,字符数组是属性,这里是方法.
 1.2根据位置获取字符.
    char charAt()
 1.3根据字符获取第一次出现的位置
    int indexOf
    int lastIndexOf
查不到的话返回-1.

4.获取字符串中一部分字符串.也叫子串.
  substring,返回子串,比如(1,3),从角标1到角标2,3是指在角标3之前.
  所以获取全部其实就是(1,s.length()).

==========================================
15-01-05
==========================================

1.转换
  1.1将字符串变成子串数组(字符串的切割)
     split
     String s="a,b,c";
     String[] arr=s.split(",");
     就是拿,逗号切
     如果拿"."点来切,"."恰恰是正则中的符号,不能普通来切,那么就转译成普通点"\\.",一定要用两个斜线.涉及到正则表达式.
  1.2打散成各个字符
     toCharArray
     返回的是 char[] arr 字符数组
  1.3将字符串转成字节数组.
     getBytes
     返回的是 byte[] arr 字节数组
     中文被打散成2个字节,ascii码表,美国标准信息交换码,GB2312,记录中文和二进制的对应关系.GBK,扩展,2万多中文字.
  1.4将字符串中的字母转换大小写
     toUpperCase() 变大写
     toLowerCase() 变小写
     返回的是String
     大A65,小a97,相差32.如果char小于97,就+32,如果大于97,就-32.(转换大小写)
     可以直接"abc".toUpperCase
  1.5将字符串中的内容进行替换
     replace(char oldch,char newch)
     没有替换成功,返回的字符串还是指向原来的字符串,如果替换成功了,跟别的字符串是不相等的.
  1.6返回字符串的副本,忽略前后空白
     trim()
  1.7连接字符串
     concat(),其实就和+加号一样.
  1.8别的形式都变成String.
     valueOf
     可以直接前面加""就行了.

2.判断
  2.1两个是否相同
     equals(Object obj)   返回的是boolean
     equalsIgnoreCase 忽略大小写
  2.2是否包含某一个字符串
     contains   boolean
  2.3字符串是否以指定字符串开头,结尾
     startsWith
     endsWith

3.比较
  3.1比较大小
     compareTo
     如果等于,返回值0,如果小于,返回负数,大于,返回正数.
     例如"a"比"b"返回-1,"a"比"c"返回-2,"a"比"A"返回32.
    
==========================================
15-01-08
==========================================

1.intern
  对字符串池进行操作
  String s1=new String("abc");
  String s2=s1.intern();
  s1在堆里,池子里没有,所以创了一个返回给s2.

2.光标放在词组上,按一下f3,直接可以打开查看源文件

==========================================
15-01-08
==========================================

练习题
1.对字符串数组排列
  选择排序,冒泡排序一个道理.
  选择:
 x=0;y=x+1;x<arr.length-1;
 arr[x]>arr[y];
  冒泡  x=0;y=0;y<arr.length-1-x;
        arr[y]>arr[y+1]

2.子串在整串中出现的次数.
  第一种:获取子串,在子串中找.
  第二种:获取位置,从找到的位置开始找.

3.两个字符串中最大的相同子串.
  相当于求小的字符串的所有子串
  大圈为长度的次数,长度为5,就是5次
  所以i<arr.length();
  小圈两个变量,两个角标同时在加.
  y=0;   z=length-x
  z<length+1;

==========================================
15-01-09
==========================================

1.StringBuffer--字符串缓冲区对象.
用于存储数据的容器.
特点:
 1长度可以改变
 2可以存储不同类型数据
 3最终要转成字符串进行使用
 4可以对字符串进行修改

2.既然是一个容器对象,应该具备什么功能呢?
  1添加:
 StringBuffer append(data);
 sb2=sb1.append(*);
 往sb1里面添加一个,s1和s2是一样的.
 可以sb1.append().append();
  2删除:
 delete(start,end)包头不包尾
 deleteCharAt(int index):删除指定位置的元素.
 清空缓冲区sb.delete(0,sb.length())
 sb=new StringBuffer();
 用第一个比较好,第二个占内存.
 还有:sb.setLength(0);
 增长长度会在后面增加空字符"".

  3插入:
 insert(1,"abc"),在角标1插入"abc".
 如果sb已经是"abcd",那么就是在b后面插入,也就是初始化b就是角标1的位置.

  4查找:
 charAt(index)
 indexOf(String)
 lastIndexOf(String)
  5修改:
 replace(start,end,string);把头到尾的东西换掉
 setChatAt(index,char)角标上的元素换掉

增删改查CURD create,update,read,delete
reverse:头尾反转

==========================================
15-01-11
==========================================

1.StringBuffer构造一个其中不带字符的字符串缓冲区,初始容量为16个字符.
  如果加入17个字符,系统会自动复制一个新数组,长度是原数组的2倍,然后把原数组的元素全都放在新数组中,然后把多出来的往后放.
  也可以指定初始容量.

2.StringBuilder
  提供和StringBuffer兼容的API,但不保证同步.StringBuffer线程安全.解决单线程效率问题.所以单线程用Builder,多线程用Buffer.

3.StringBuffer一旦构成了就是整串字符串,不像数组那样可以一个个取出来.

4.把数组改变成字符串,如果用String来加,那么每次都会在字符串常量池中添加一个字符串,占内存大,如果用StringBuffer,那么就是一个字符串对象.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值