Java 等值子串_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());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值