String:字符串数组类型
java.lang.String使用的final修饰,不能被继承(lang包的不用引用)
字符串数组底层封装了字符数组以及字符数组的操作算法
String str ="hello"; char[] arr = {'h','e','l','l','o'};
java字符串在内存中采用Unicode编码方式,任何一个字符对应两个字节的编码
字符串一旦创建,对象内容永远无法改变,但字符串引用可以重新赋值
常量池:
java对字符串的优化措施:字符串常量池(堆中)
java推荐我们使用字面量/直接量的方式来创建字符串,并且会缓存所有以字面量形式创建的字符串对象到常量池中,当使用相同字面量再次创建字符串时会重用对象以减少内存开销,避免内存中堆积大量内容相同的字符串对象
String面试题:
1.
2.字符串不可变特性
3. 连接问题
String常用方法:
1.length():获取字符串的长度(字符个数)
int = str.length()
2.trim():去除当前字符串两边的空白字符
String = str.trim();
3.indexOf(String str):检索给定字符串在当前字符串的开始位置
int lastIndexOf(String str): 检索给定字符串在当前字符串中最后一次出现的位置
int =str.indexOf(String string);
4.substring(int start,int end):截取当前字符串中指定范围内的字符串(含头不含尾--包含start,但不包含end)
str.substring(int,int)
5.charAt():返回当前字符串指定位置上的字符
char = charAt(int);
6.startsWith(String str)和endsWith(String str):判断当前字符串是否是以给定的字符串开始/结尾的
boolean =str.startsWith(String)
7.toUpperCase()和toLowerCase():将当前字符串中的英文部分转为全大写/全小写
String = str.toLowerCase();
8.valueOf():String类中提供的静态方法,将其它数据类型转换为String
static String valueOf(数据类型 x)
String =String.valueOf(数据类型 x)
ASCII:美国标准编码,是美国最早的字符集,也是计算机最底层的字符集,一个字节
GBK:国标编码,中国自己的编码,总共6万多个
Unicode:万国码,装全世界所有符号
UTF:在Unicode基础之上做的二次编码,里面加入了一个长度信息来标记是按一个字符解析还是按两个字符算
结论:互联网上真正使用的并不是unicode,真正传输出的是UTF这种带长度信息的编码,拿到UTF数据后再把长度去掉,还原成unicode编码。
字符串拼接
StringBuilder appead(char c)
正则表达式
***String[ ] split(正则)劈开字符串 如:"," "\." "\\"
replaceAll(String regx,String replacement)
替换此字符串所有匹配给定的正则表达式的子字符串
除了正则内容被丢了其他的均保留存在数组
将一个字符串劈开为几个子字符串:
String[ ] arr = str.split(正则)
正则表达式:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
java(要求特殊字符要用'\'转义):\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}
ipv4(java):(\\d{1,3}){3}\\d{1,3}
计算机的计算,将十进制转为二进制数补码进行+(顺序)-(逆序)
运算符:
&:与
>>>右移位运算
|或运算
>> :移位比乘法快 结果必须是2的倍数
n<<1 乘1个2 n<<3乘3个2
>>>和>>区别 不用>>>