字符串
1、性质
1.1、子串
/**
* @author by wangnaixing
* @Description
* @Date 2021/12/27 10:14
*/
public class StringApi {
public static void main(String[] args) {
String str1 = "1234wangnaixing56789";
//提出字母
System.out.println(str1.substring(4,15));//wangnaixing
}
}
1.2、拼接
/**
* @author by wangnaixing
* @Description
* @Date 2021/12/27 10:14
*/
public class StringApi {
public static void main(String[] args) {
String x1 = "123";
String x2 = "456";
int x3 = 789; //整型在做加法的时候,转String,再拼接
String msg = x1+x2+x3;
System.out.println(msg);//123456789
}
}
1.3、复读机
/**
* @author by wangnaixing
* @Description
* @Date 2021/12/27 10:14
*/
public class StringApi {
public static void main(String[] args) {
String name = "wangnaixing";
String repeat = name.repeat(3);
System.out.println(repeat);//wangnaixingwangnaixingwangnaixing
}
}
1.4、不可变的字符串
字符串如
abc
不能直接修改,abc
称为字符常量。如果要修改只能修改引用指向,比如指向bcd
.
/**
* @author by wangnaixing
* @Description
* @Date 2021/12/27 10:14
*/
public class StringApi {
public static void main(String[] args) {
String x1 = "abc";
x1 = x1.substring(1,3)+"d";
System.out.println(x1);
}
}
1.5、检测字符串是否相等?
/**
* @author by wangnaixing
* @Description
* @Date 2021/12/27 10:14
*/
public class StringApi {
public static void main(String[] args) {
String x1 = "abc";
String x2 = "abc";
System.out.println(x1.equals(x2));//true
}
}
1.6、空串和判空
空串就是长度为0的字符串
/**
* @author by wangnaixing
* @Description
* @Date 2021/12/27 10:14
*/
public class StringApi {
public static void main(String[] args) {
String x1 = "";//这是一个空串
System.out.println(x1.length()); //0
}
}
/**
* @author by wangnaixing
* @Description
* @Date 2021/12/27 10:14
*/
public class StringApi {
public static void main(String[] args) {
String x1 = "";//这是一个空串
if (x1!=null && x1.length()>0){
//判定字符串既不是null可不是空串的逻辑
}
}
}
2、行为
2.1、根据索引得到字符
/**
* @author by wangnaixing
* @Description
* @Date 2021/12/27 10:14
*/
public class StringApi {
public static void main(String[] args) {
String x1 = "abcdefgh1jilif";
char c = x1.charAt(3);
System.out.println(c);//d
}
}
2.2、根据索引得到码点
/**
* @author by wangnaixing
* @Description
* @Date 2021/12/27 10:14
*/
public class StringApi {
public static void main(String[] args) {
String x1 = "abcdefgh1jilif";
int i = x1.codePointAt(3);
System.out.println(i);// d字符在编码表的代码值为100
}
}
3、问题
这些很多
StringAPI
,挺多很简单的,一看就懂。可以通过网站https://docs.oracle.com/javase/9/docs/api/java/lang/String.html 查询使用,可是对于一些概念,码点,Unicode编码机制不是很清晰。导致看不懂API
3.1、你了解char吗?
我们知道字符类型 char 在 Java 中是和 Unicode编码 形成一一对应的映射来存储的,而采取的编码方式则为
UTF-16
。
字符串,就是一个个字符串起来,包起来的对象。而字符,计算机并不认识字符,只知道01二进制。字符和二级制需要一个映射关系。所以一开始有了美国的ASCII,但对于别的不是英文母语的国家,就需要更多字符,比如中国这么多的汉字,ASCII就不够用。
于是有了Unicode的编码方案,这是一本大的字典,大到把全世界的字符和二进制数都搭建了关系。
3.2、UTF-8
UTF-16
这里的 UTF
是 Unicode transformation format 的缩写,即统一码转换格式。
解决方法:不定长存储,比如,汉这个字占有2个字节,字母A一个字节,采用Unicode编码为了兼容。只能每个字符都要2个字节.UTF就是做这样的转化工作的。
3.3、码点
码点就是编码表中某个字符对应的代码值,这个代码值就标识这个字符。