Java字符串

字符串

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:𝕫   length代码单元为:2  codePointCount码点个数:1
  • String.charAt(i)返回第i个代码单元,
  • String.codepointAt(i)返回i 处字符的代码点值

7.构建字符串

有时候如果需要较短的字符串构建字符串,如果用字符串拼接的方式来达到这个目的,效率会比较低,所以我们可以使用StringBuilder类来避免这个问题。

StringBuilder前身是StringBuffer,但是StringBuffer的效率稍有些低,但是允许多线程的添加或删除字符,如果所有的字符串都在单个线程中执行,则应该使用StringBuilder。这两个API是相同的。

  • StringBulider.append(String A)

    追加一个字符串

  • StringBuilder.append(char c)

    追加一个字符

  • StringBuilder.setChartAt(int index,char c)

    在index处添加一个字符

  • StringBuilder.insert(int index,String A)

    在index处添加一个字符串

  • StringBuilder.delete(int a,int b)

    删除【a~b)处的字符串

  • StringBuilder.deleteAt(int index)

    删除index处的字符

String greeting="hello";
StringBuilder builder=new StringBuilder();//创建一个StringBuilder类
builder.append(greeting);
builder.append("world");
builder.append('?');
builder.setCharAt(builder.length()-1,'!');
builder.insert(0,"cwstd ");
builder.delete(0,6);
builder.deleteCharAt(builder.length()-1);
System.out.println(builder.toString());
posted @ 2020-11-06 21:27  cwstd  阅读(148)  评论(0编辑  收藏  举报