java位运算,字符串

上午

1. 位运算

左移,右移
补符号位

一个负数,换为一个绝对值相同的正数 ,用>>>

public class index{

    public static void main(String[] args){

        int x = 55;

        int y = -177;

        System.out.println(Integer.toBinaryString(x));

        System.out.println(Integer.toBinaryString(y));

        x = x << 4;

        y = y >>> 3;

        System.out.println(Integer.toBinaryString(x));

        System.out.println(Integer.toBinaryString(y));

    }

}

// 110111
// 11111111111111111111111101001111
// 1101110000
// 11111111111111111111111101001

char类型在java中,根据编码不同,位数也不一样

2. 字符串截取

str.substring(a,b); // `[a,b)

字符串能够跟字符串相加,也可以跟基本类型相加

编译器可以让字符串共享

java字符串变得更长,不在本地修改;变得更短会进行内存回收
但是C语言不能实现,会被利用这一特点进行溢出攻击。

基本类型比较值,引用类型,比较引用的地址是否相同

public class index{

    public static void main(String[] args){

        String x1 = "aaa";

        String x2 = "aaa";

        String x3 = new String("aaa");

        System.out.println(x1 == x2);

        System.out.println(x2 == x3);

    }

}
// true
// false

对于指向同一个地址的字符串,也可大胆更改,因为是不可变字符串。

new 重新开辟空间

使用equals()来比较字符串数值。(区分大小写)

String x3 = new String(“aaa”);
String x6 = x3; // 指向一样

null只有地址,空串有指向

API接口类似文档

charAt(index)获取索引值
codePointAt(index)获取索引值的ASOLL码

流的底层是数组(stream,buffer)

一些小方法

char charAt (int index)
返回给定位置的代码单元。除非对底层的代码单元感兴趣, 否则不需要调用这个
方法。
• int codePointAt(int Index)
返回从给定位置开始的码点。
• int offsetByCodePoints(int startlndex, int cpCount)
返回从 startlndex 代码点开始,位移 cpCount 后的码点索引。
• i n t compareTo(String other)
按照字典顺序,如果字符串位于 other 之前, 返回一个负数;如果字符串位于 other 之
后,返回一个正数;如果两个字符串相等,返回 0。
• IntStream codePoints()
将这个字符串的码点作为一个流返回。调用 toArray 将它们放在一个数组中。
• new String(int[] codePoints, int offset, int count)
用数组中从 offset 开始的 count 个码点构造一个字符串。
• boolean equals(0bject other)
如果字符串与 other 相等, 返回 true。
• boolean equalsIgnoreCase(String other )
如果字符串与 other 相等 ( 忽略大小写,) 返回 tme。
• boolean startsWith(String prefix )
• boolean endsWith(String suffix )
如果字符串以 suffix 开头或结尾, 则返回 true。
• int indexOf(String str)
• int indexOf(String str, int fromlndex )
• int indexOf(int cp)
• int indexOf(int cp, int fromlndex )
返回与字符串 str 或代码点 cp 匹配的第一个子串的开始位置。这个位置从索引 0 或
fromlndex 开始计算。 如果在原始串中不存在 str 返回 -1。
• int 1astIndexOf(String str)
• Int 1astIndexOf(String str, int fromlndex )
• int lastindexOf(int cp)
• int 1astindexOf(int cp, int fromlndex )
返回与字符串 str 或代码点 cp 匹配的最后一个子串的开始位置。 这个位置从原始串尾
端或 fromlndex 开始计算。
• int 1ength( )
返回字符串的长度。
•int codePointCount(int startlndex , int endlndex ) 5.0
返回 startlndex 和 endludex-l之间的代码点数量。没有配成对的代用字符将计入代码点。
參 String replace( CharSequence oldString,CharSequence newString)
返回一个新字符串。这个字符串用 newString 代替原始字符串中所有的 oldString。可
以用 String 或 StringBuilder 对象作为 CharSequence 参数。
String substring(int beginlndex )
參 String substring(int beginlndex, int endlndex )
返回一个新字符串。这个字符串包含原始字符串中从 beginlndex 到串尾或 endlndex-l
的所有代码单元。
String toLowerCase( )、String toUpperCase( )
返回一个新字符串。 这个字符串将原始字符串中的大写字母改为小写,或者将原始字
符串中的所有小写字母改成了大写字母。
String trim( )
返回一个新字符串。这个字符串将删除了原始字符串头部和尾部的空格。
String join(CharSequence delimiter, CharSequence … elements ) 8
返回一个新字符串, 用给定的定界符连接所有元素。

		char k1 = w.charAt(6);

        String[] arr = w.split("h");

        String[] arr2 = w.split("uh");

        System.out.println(Arrays.toString(arr) + "###" + Arrays.toString(arr2));

3. 字符串与StringBuilder

public class index{

    public static void main(String[] args){

        long start = System.currentTimeMillis();

        String w = "";

        for(int i = 0;i < 100000; i++){

            w += "a";

        }

        long end = System.currentTimeMillis();

        long time = start - end;

        System.out.println(time);

        long start2 = System.currentTimeMillis();

        StringBuilder w2 = new StringBuilder();

        for(int i = 0;i < 100000; i++){

            w2.append("a");

        }

        long end2 = System.currentTimeMillis();

        long time2 = start2 - end2;

        System.out.println(time2);

    }

}

不同的数据不同的地址,读取地址
String的拼接,10000次地址指令,记录的地址也非常多

String : 8GB = 2^33B 2^33个数据 2^33地址需要存储
StringBuilder:读取快,消耗地址小,内存页4KB对外只有一个地址,相当于一个变量

short类型分配4kB,实际上只占2B
任何开销实际分配4KB起步

申请足够大的空间,支持分配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值