第一天
一、String:字符串类型
--java.lang.String使用final修饰,不能被继承
--字符串底层封装了字符数组以及针对字符数组的操作算法
--java字符串在内存中采用Unicode编码方式,任何一个字符对应两个字节的编码
--字符串一旦创建,对象内容永远无法改变,但字符串引用可以重新赋值
二、常量池:
--java对字符串有一个优化的措施:字符串常量池(堆中)
--java推荐我们使用字面量/直接量(字符串变量的拼接不算)的方式创建字符串,并且会缓存所有以字面量形式创建的字符串对象,当使用相同字面量再次创建字符串时会重用对象以减少内存开销,避免内存中堆积大量内容相同的字符串对象.三、String常用方法(8个):
length():
/** * public int length() * length()方法:可以获取字符串的长度(字符个数) */
trim():
/** * public String trim(): * 去除当前字符串两边的空白字符 */
indexOf():
/** * public int indexOf(String str) * 检索给定字符串在当前字符串的起始位置,找不到就返回-1 * public int indexOf(String str,int fromindex) * 重载可以从指定位置开始检索第一次出现指定字符串的位置 * public int lastIndexOf(String str) * 检索给定字符串在当前字符串的最后一次出现的位置,找不到就返回-1 */
substring():
/** * public String substring(int start, int end) * 截取当前字符串中指定范围内的字符串-------包含start,但不包含end * public String substring(int start) * 截取当前字符串中指定范围内的字符串-------从start开始到末尾 */
charAt():
/** * public char charAt(int index) * 返回当前字符串指定位置的字符 */
startsWith()和endsWith()
/** * public boolean startsWith(String str) * 判断当前字符串是否以给定的字符串开始的 * public boolean endsWith(String str) * 判断当前字符串是否以给定的字符串结束的 */
toUpperCase()和toLowerCase()
/** * public String toUpperCase() * 将当前字符串中的英文部分转为全大写 * public String toLowerCase() * 将当前字符串中的英文部分转为全小写 */
valueOf():静态方法
对比:字符串拼接与valueOf()对比(下一天讲)
/** * public static String valueOf(数据变量 a) * 将其他数据类型转换为String */
第二天
一、StringBuilder用于提升String字符串的连接性
1.简单理解:StringBuilder连接性能好(面试题)
2.方法:
1)append():追加,在StringBuilder的后面添加字符,当容量满了,会自动扩容,
扩容规则:1倍+2
2)insert(位置,字符):插入字符
3)delete(开始位置,结束位置):删除字符,删除一定范围内的字符包含开始,不包含结束
4)toString()方法可以将StringBuilder转换为String
3.StringBuilder的API返回的大多是当前对象,可以连续使用.调用方法
StringBuilder buf = new StringBuilder(); buf.append("A") .append("A") .append("A") .append("B") .insert(1,"C") .delete(2,4);
4.==是判断地址是否相等,euqals()是判断内容是否相等
二、正则表达式:用于检测、测试字符串规则的表达式
1.经常用于检测字符串是否符合特定的规则,在网站上经常用于检查用户输入数据是否规范
·检测用户名是否为8~10的数字、英文(大小写)
·检测电话号码是否符合规则
·检测邮箱地址是否符合规则等
2.boolean matches(正则):检测当前字符串是否符合正则规则
三、字符集:匹配一个有效的字符范围
1.语法:
[123456]
2.意义:
1)匹配一个字符
2)其有效范围:1 2 3 4 5 6中的某一个
四、字符范围
1.规则:
1)匹配0~9一个字符:[0-9]或者\d
2)匹配A~Z一个字符:[A-Z]
3)匹配a~z一个字符:[a-z]
4)匹配a~zA~Z一个字符:[a-zA-Z]或者\
5)匹配一个单词字符:[a-zA-Z0-9_]或者\w
6)匹配一个空白字符:/s
规则 正则 预定义字符集 例子 匹配A~Z一个字符 [A-Z] 匹配a~z一个字符 [a-z] 匹配a~zA~Z一个字符 [a-zA-Z] 匹配0~9一个字符 [0-9] \d Hello\d 匹配一个单词字符 [a-zA-Z0-9_] \w A\w 匹配一个空白字符 \s Hello\sWorld 匹配任意一个字符 . A.
匹配一个非数字 \D 匹配一个单词 \W 匹配一个非空白 \S
五、数量词:约定左侧元素出现的次数
如:\w{6}
1.语法:
1)x{n} 规定左侧x出现n次
2)x{n,m} 规定左侧x最少出现n次,最多出现m次
3)x{0,n} 规定左侧x最多出现n次
4)x{n,} 规定左侧x最少n次
六、简写数量词
1. X? 和 X{0,1}等价 X可以没有或者有一个
2. X+ 和 X{1,}等价 X至少有一个
3. X* 和 X{0,}等价 X至少有0个
七、特殊字符转义
如何匹配字符[ ] ? + * .,使用 \ 特殊字符进行转义
八、分组:将一组规则作为整体进行处理
"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"可以写成"(\\d{1,3}\\.){3}\\d{1,3}"九、java正则API
1.matches 检查字符串是否整体符合正则表达式规则
2.split 劈开(重要)
1)将一个字符串劈开为几个子字符串:
"192.168.5.140"劈开为"192""168"5""140"
"1,Cabbage,110,cabbage@csdn.net"劈开为"1","Cabbage","110","Cabbage@csdn.net"
2)使用:
2.1)str存储的是要被劈开的字符串2.2)正则 用于匹配劈开的位置点,如:,或者 \.
2.3)返回值 是劈开以后的数组,每个元素是劈开的子字符串
String arr[] = str.split(正则);
3.replaceAll 全部替换
将正则表达式匹配到的字符串,都替换为新的字符串
十、Object
十一、包装类
第三天
一、什么是2进制:为什么计算机用二进制(成本优势明显)
1.逢2进1的计数规则
2.数字:0 1
3.权:128 64 32 16 8 4 2
4.基数:2
5.写法:数字前加0b且可以在数字中加下划线,不影响数值
PS:利用ValueOf将底层的2进制转换成人能看懂的10进制和文字
Integer.toBinaryString(n) 将整数n在内存中2进制情况显示出来
二、什么是16进制
1.逢16进1的计数规则
2.数字: 0 1 2 3 4 5 6 7 8 9 a b c d e f
3.权: 4096 256 16 1
4.基数: 16(是2进制的基数的4次方),2进制每4位数可以缩写为1个16进制数.
5.16进制缩写2进制:(数字前加0x为16进制)
从2进制最低位开始,每4位缩写为1位16进制数
三、补码
1.计算中一种表示有符号数编码,其核心思想就是固定位数2进制分一半作为负数。
2.如何将固定位数2进制分一半作为负数
1)以4位2进制数讲解如何设计补码
2)计算时候保持4位不变,多余位自动溢出
3)最高位为符号位,0是正数,1是负数
4)补码的对称互补现象 -n = ~n + 1
四、2进制运算
运算符号:
1.~ 取反运算
2.& 与运算
1)运算规则:逻辑乘法
0&0 -> 0
0&1 -> 0
1&0 -> 0
1&1 ->1
2)运算时将两个2进制数对其位,对应位置与运算
n = 00010111 10011101 01011101 10011110 m = 00000000 00000000 00000000 11111111 k=n&m 00000000 00000000 00000000 10011110
如上运算的意义:k中存储的是n的最后8位数,如上运算叫做掩码(mask)运算.m成为掩码
3.| 或运算
1)运算规则:逻辑加法,有1则1
0&0 -> 0
0&1 -> 1
1&0 -> 1
1&1 ->1
2)运算时将两个2进制数对其位,对应位置或运算
n = 00000000 00000000 00000000 11011101 m = 00000000 00000000 10011101 00000000 k=n|m 00000000 00000000 10011101 11011101
上述计算的意义:两错位数合并
4.>>>右移位运算(一般移动8位,然后与掩码一起使用)
1)运算规则,将2进制数整体向右移动,低位自动溢出舍弃,高位补0
n = 01100111 11010111 10001111 01101101 m=n>>>1 001100111 11010111 10001111 0110110 k=n>>>2 0001100111 11010111 10001111 011011 g=n>>>8 00000000 01100111 11010111 10001111
5.<<左移位运算(没有数学左移位)
1)2进制数字整体向左移动,高位自动溢出,低位补0
6.>>数学右移位运算
>>>与>>的区别
1) >>>逻辑右移位:数字向右移动,低位自动溢出,高位补0,结果没有数学意义.如果仅仅将数位向右移动,不考虑数学意义,则使用>>>
2)>>数学右移位:数字向右移动,低位自动溢出,正数高位补0,负数高位补1,移动一次数学除以2,小方向取整.如果是替代数学/2,使用数学右移位>>.