java第十六课

String类

重点:

new String() --à地址  final,不能被继承

String底层char[]数组 final,不能改变数组内容。

New String(“a”)+new String(“b”)---àStringBuilder

concat 开辟一个两个字符长度的空间,把两个字符串连接在一起

方法:

isEmpty 判空

length()长度,调用数组的属性 length

charAt()在某个索引位置上的字符

substring 以子串

getBytes() 取字节,在操作中文的相关内容

indexOf/lastIndexOf 索引

replace的替换方法

1、所有的修改字符串操作都是不能替换原串的,

2、原理:

底层:replaceAll

实际发生的String的替换方法

public String replaceAll(String replacement) {
    reset();
    boolean result = find();
    if (result) {
        StringBuffer sb = new StringBuffer();
        do {
            appendReplacement(sb, replacement);
            result = find();
        } while (result);
        appendTail(sb);
        return sb.toString();
    }
    return text.toString();
}

实际String的替换底层使用StringBuilder

StringBuilder里面的replace特点,可以指定开始位置和结尾位置进行替换,String里面的replace特点,从字符串开始到字符串结尾遍历查找,查找到调用StringBuilder来替换。

在数组有一些文件名,.doc批量改成.txt

String[] arrs={"aa.doc","bbb.doc","ccc.doc","ddddddd.doc"};
for(int i=0;i<arrs.length;i++){
    StringBuilder sb=new StringBuilder(arrs[i]);
    int len=arrs[i].length();
    //StringBuilderreplace参数,第一个 start开始,第二个是结束,第一个替换的字符串
    sb.replace(len-4,len,".txt");
    arrs[i]=sb.toString();
}
System.out.println(Arrays.toString(arrs));

注意:

如果使用到字符的替换,使用StringBuilder中的替换代替String中的替换,方法很有效率。   

只有一种情况:替换的字符串在字符串中不知道位置。

indexOf结合StringBuilder()替换

StringBuffer方法中带synchronized 关键字,是并发的意思。

hashCode/equals相等时,hashCode效率高,equals效率低

String:根据字节数组中每一个元素的哈希值来判断相等,+31*前一元素的哈希值。

matches  匹配正则表达,自己写正则表达式

contains包含 indexOf  lastIndexOf

contains相当于indexOf, lastIndexOf调用indexOf

 contains返回的true或者false, indexOf返回被查字符串的索引。

split 重要指数非常高,作用把字符串按照特定字符串分割成数组。

攻击 云(穴头)

应用的场景

  1. 网站的安全(封ip,封mac)split切分ip  (攻击)
  2. 统计一个字符串中某些字符的出现次数。

(一个用户1分钟内刷网站1000次)

刷网站的痕迹在日志.

Split判断字符在字符串的次数,length-1,大致判断出来这个ip的驱势.

静态方法join 数组连接成字符串

toLowerCase 把字符转小写

toUpperCase 把字符转大写

trim()方法截取空格

toCharArray把字符串转成字符数组

静态方法 format

String.format(“%.2f”,s)

静态方法: valueOf

如果当前字符串变量为空,返回字符串为空

native 原生

集合类(变长)

应用最多的变长数组,也就列表

ArrayList  

了解原理

New ArrayList过程建立一个空数组

自己添加元素会报错。

ArrayList添加元素不报错,原因前面有一个方法

ensureCapacityInternal(size + 1);

在调用ArrayList上的add方法前, java做了一个

Arrays.copyOf拷贝数组

add一个元素,java默认产生一个数组,数组的长度是10.

查询列表是get方法

public E get(int index) {
    rangeCheck(index);

    return elementData(index);
}

在get方法中最开始执行一个rangeCheck

  

java第十六课 · WL—code/WL仓库 - Gitee.com

  

   

 

  

 

  

你可能感兴趣的:(java,算法,数据结构)