String的操作
基础操作,后续在面向对象章节细讲
String
类的构造方法很多。可以通过初始化一个字符串,或者字符数组,或者字节数组等等来创建一个String
对象
常见方法
- length()
- substring(int)/(int,int)
- charAt(int index):char
- indexOf(int ch) 和 indexOf(int ch, int fromIndex) 方法
- equals(String):boolean比较两个字符串的内容是否相等
- split(String regex)
常见方法:intern() 方法
String s1="ab"+"c";
String s2="abc";
System.out.println(s1==s2); //true
字符串常量拼接,在方法区的常量池中完成
String s0="ab";
String s1=s0+"c";
String s2="abc";
System.out.println(s1==s2); //false
String
类型的拼接是通过
StringBuilder
类中的
append
方法实现的,然后返回
toString
的结果。是在堆中的新对象
字符串转数字
使用Scanner读取键盘录入数据
- next():String 当光标扫描到第一个分隔符(默认是空格)停止扫描,会创建一个String类的对象,里面存储的就是扫描的内容(不包含空格分隔符)返回创建的String对象的引用给n
Scanner cin=new Scanner(System.in);
while (true) {
String n = cin.next();
if("exit".equals(n))
break;
System.out.println(n + 'A');
}
cin.close();
- nextLine():读取输入,包括单词之间的空格和除回车以外的所有符号(即。它读到行尾)。读取输入后,nextLine()将光标定位在下一行。所以它和next()的区别就是它没有分隔符,直接扫描全部的键盘输入内容,并创建对象进行将其引用返回
- 目标类型名.parse类型(String)
- Integer.parsetInt(String):int
- Double.parsetDouble(String):double
数字转字符串
""+
任意类型数据
字符串新方法
- String.repeat(int) 根据 int 参数的值重复 String
- String.lines() 拆分由其行终止符在其上调用的 String ,并返回由这些行终止符划分的Strings Stream 。具体使用以后再说
- String.strip() 、 String.stripLeading() 和 String.stripTrailing() 去除字符串的空格
- String.isBlank() 判断String是否为空或仅包含空格字符
具体实现原理
在
JDK1.8
以前采用
char[]
实现,现在采用
byte[]
的方式实现。可以减少字符串占用的内存,同时减少垃圾回收次数。
实际开发中单字节的字符使用频率远高于双字节的。在
JDK8+
版本中
Java
会根据字符串内容自动设置为相应的编码,要么
Latin-1
要么
UTF16
,中文是两个字节,纯英文是一个字节。
不使用
UTF-8
编码字符集是因为
UTF-8
是变长编码的,有
1
、
2
、
3
、
4
字节的不同情况,所以对于
String
随机访问操作很不方便
UTF-16
也是变长编码,是使用
2
或者
4
个字节存储字符。对于
Unicode
编码在
0-FFFF
之间的字符使用两个字节存储,而
10000-10FFFF
之间的字符使用
4
个字节。但是
Java
中一个
char
就是
2
个字节,同时
String
的
各种操作都是以
Java
字符为单位的,所以
UTF-16
在
Java
中可以看作一个定长的编码