java字符串个人见解

目录

字符串:

常见字符串StringAPI:

字符串为什么不可变:

String,StringBuilder,StringBuffer的区别,字符串拼接有什么区别:


字符串:

 

     从概念上讲 Java 字符串就是 Unicode 字符序列 例如 Java \ u 2122 5
Unicode 字符 J a v a 和™ Java 没有内置的字符串类型 而是在标准 Java 类库中提供了
一个预定义类 很自然地叫做 String

常见字符串StringAPI:

  • char charAt(int index)
  •  返回给定位置的代码单元。除非对底层的代码单元感兴趣, 否则不需要调用这个方法。
  • int codePointAt(int index)5.0
  • 返回从给定位置开始的码点。
  • int compareTo(String other)
  • 按照字典顺序,如果字符串位于 other 之前, 返回一个负数;如果字符串位于 other 之 后,返回一个正数;如果两个字符串相等,返回 0。
  • new String(int[] codePoints,int offset,int count)5.0
  • 用数组中从 offset 开始的 count 个码点构造一个字符串。
  • boolean equals(boject other)
  • 如果字符串与 other 相等, 返回 true。
  • boolean startWith(String prefix)
  • boolean endsWith(String suffix)
  • 如果字符串以 suffix 开头或结尾, 则返回 true。
  • int indexOf(String str)
  • int indexOf(String str,int fromIndex)
  • int indexOf(int cp)
  • int indexOf(int cp,int fromIndex)
  • 返回与字符串 str 或代码点 cp 匹配的第一个子串的开始位置。这个位置从索引 0 或fromlndex 开始计算。 如果在原始串中不存在 str,返回 -1。
  • int length()
  • 返回字符串的长度。
  • String replace(CharSequence oldString,CharSequence newString)
  • 返回一个新字符串。这个字符串用newString 代替原始字符串中所有的oldString。可以用String或StringRuilder对象作为CharSequence参数
  • String substring(int beginIndex)
  • String substring(int beginIndex,int endIndex)
  • 返回一个新字符串。这个字符串包含原始字符串中从beginIndex到串尾或endIndex-1的所有代码单元
  • String toLowerCase()
  • String toUpperCase()
  • 返回一个新字符串。这个字符串将原始字符串中的大写字母改为小写,或者将原始字符串中的所有小写字母改成了大写字母。
  • String trim()
  • 返回一个新字符串。这个字符串将删除原始字符串头部和尾部的空格
  • String[] split(String  a) 分割
  • 可以根据字符串里面你选中的标记字符进行分割,形成多个子字符串
  • String[]  a = "aassaassaassddffggssaa".split("ss");
  • 意思是根据字符串ss进行分割,形成aa,aa,aa,ddffgg,aa5个子字符串,存入a数组中
public class Demo{
    public static void main(String[] str){
        String a=" String API演示abcdefg123456qwe ";//创建一个字符串a;
        char x1 = a.charAt(3);//查找第3位字符;
        int  x2 = a.codePointAt(5);//查询第6位字符的编码(索引是5);
        int   x3 = a.compareTo("c");//比较编码值,从第一位开始比较;
        String b = new String("a");
        boolean x4 = a.equals(b);//判断字符串b和字符串字面值是否相等;
        boolean x5 = a.startsWith(" String");//字符串是否以“ String开头”;
        boolean x6 = a.endsWith("qwe ");//字符串是否以”qwe “结尾;
        int x7 = a.indexOf("P");//字符串中”P“第一次出现的位置;
        int x8 = a.indexOf("f",10);//从第10位开始,查找字符”f“的位置;
        String x = new String("API");
        int x9 = a.indexOf(x); //子字符串x在字符串a中首次出现的位置;
        int x10 = a.indexOf(x,5);//从第5位开始查找子字符串x出现的位置;
        int x11 = a.length(); //字符串a的长度;
        String x12 = a.replace("e","m");//将字符串a中的字符e用字符m替换;
        String x13 = a.substring(8);//查询从第8位开始到末尾的字符;
        String x14 = a.substring(8,10);//查询第8位到第10位的字符(前闭后开:包括第8位不包括第10位);
        String x15 = a.toLowerCase();//将字符串中所有字母小写;
        String x16 = a.toUpperCase();//将字符串中所有字母大写;
        String x17 = a.trim();//去除字符串开头结尾的空格;
        String[]  c = " String API演示abcdefg123456qwe ".split("g");//将字符串按g处分割;
            System.out.println("x1:"+x1);
            System.out.println("x2:"+x2);
            System.out.println("x3:"+x3);
            System.out.println("b:"+b);
            System.out.println("x4:"+x4);
            System.out.println("x5:"+x5);
            System.out.println("x6:"+x6);
            System.out.println("x7:"+x7);
            System.out.println("x8:"+x8);
            System.out.println("x9:"+x9);
            System.out.println("x10:"+x10);
            System.out.println("x11:"+x11);
            System.out.println("x12:"+x12);
            System.out.println("x13:"+x13);
            System.out.println("x14:"+x14);
            System.out.println("x15:"+x15);
            System.out.println("x16:"+x16);
            System.out.println("x17:"+x17);
            System.out.println("c:"+c);
        }
}

 输出结果:

字符串为什么不可变:

字符串不可变:指的是不可在原地址修改,原地址空间不可控

    引用类型的值大小会发生变化,对空间的要求不固定

    等号左侧叫做句柄,右侧叫做值,在内存中,基本类型句柄和值是在一块的,引用类型不在一块;引用类型的句柄记录着值的地址,用来找到他的值,每修改一次值句柄内就换一次新地址,原来的地址就不要了(一般情况下 如果某一块地址没人记录他了 就会被删掉了但是 只有在字符串里面 他会重新指回来 因为有字符串常量池(常量池1.7版本及以前不在堆里面 1.8版本 及以后在堆里面了   要是修改回原来的值 句柄内还是用旧地址)

String,StringBuilder,StringBuffer的区别,字符串拼接有什么区别:

后两种拼接速度远远快于第一种;StringBuilder多线程之下不安全;StringBuffer在多线程之下安全,因为内部加锁了;这俩速度差不多,StringBuffer稍微慢。

       buffer:原地址内存空间预留大,对拼接有缓冲,对内存消耗大大降低。如果见到其他类型带buffer的,它的核心存储区域是数组,带有很大缓冲空间的数组。目的就是在于节省内存。他是性能最好的


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值