字符串
Java中没有字符串类型,Java中提供了一个预定类,很自然的叫做String,用双引号括起来的都叫做String。
1.子串
(1)substring方法
substring(a,b)的方法从字符串中取一个字串,从a取到b-1,类似于python的切片。子串的长度位b-a。
String greeting="hello";
String s=greeting.substring(0,3);
System.out.println(s);
输出为:hel
2.拼接
(1)Java中允许用+号来连接两个字符串。
(2)如果是字符串与非字符串连接,后者会转化为字符串。
3.不可变的字符串
String中没有提供可以修改字符串中某一个字符的方法,如果想要修改字符串的内容,可以用substring的方法,先提取字符串,在用+修改字符串。
在Java中字符串变量只是指向公共储存池中的字符串,如果想要复制字符串,仅仅可以让其他变量指向该字符串,Java的设计者认为共享带来的效率远远高于提取字符串和拼接字符串。
String greeting="hello";
String s=greeting.substring(0,3)+"p!";
4.检测字符串是否相等
(1)equals方法
区分大小写
(2)equals.IgnoreCase方法
不区分大小写
String greeting="hello";
String greeting1="hello";
String greeting2="Hello";
System.out.println(greeting.equals(greeting1));
System.out.println(greeting.equals(greeting2));
System.out.println(greeting.equalsIgnoreCase(greeting2));
//OUT:true false true
不能用==检测字符串是否相等
因为字符串是储存在公共储存池里,当两个字符串变量都储存相同的字符串地址时用等号结果为true,但是当创建一个相同字符串对象时,在用==就是false
String greeting1="hello";
String greeting3=new String("hello");
System.out.println(greeting3==greeting1);
//OUT:false
5.空串与Null串
(1)空串
“”是一个长度为 0 且占内存的空字符串,在内存中分配一个空间,可以使用 Object 对象中的方法。
判断是否为空串
String greeting1="";
System.out.println(greeting1.equals(""));
System.out.println(greeting1.length()==0);
(2)Null串
Null串直接将字符串赋值给null,null 是空引用,表示一个对象的值,没有分配内存,调用 null 的字符串的方法会抛出空指针异常。
String greeting=null;
System.out.println(greeting!=null&&greeting.length()!=0);
所以检测字符串既不是Null串又不是空串,先要检测是不是Null串,因为如果是Null串,字符串对象没有建立,使用方法时会报错。
6.码点与代码单元
Java char类型
java支持unicode, 并使用UTF-16保存码点,char类型对应双字节的代码单元,若保存特殊字符(其码点大于等于0x10000),Java会使用两个char 类型变量保存。
- String.length() 返回字符串所使用的代码单元个数,或者说返回字符串占用的char类型数据个数。
- String.codePointCount() 则返回字符串的码点个数,一个字符对应一个码点,所以该方法可以真正返回字符串当中的字符个数。
String.length()返回的是char类型的个数,String.codePointCount()返回的是字符的个数。
String greeting="\uD835\uDD6B";//在UTF-16中占用两个char,也就是两个代码单元
System.out.println(greeting.length());
int cpCount=greeting.codePointCount(0,greeting.length());
System.out.println(cpCount);
//OUT: