2021-3-1字符串复习

Java没有内置字符串类型,只是在Java类库中提供String预定义类,通常是用双引号阔起来的字符串。
其中substring方法可以从一个较大的字符串提取一个子串:
代码片段

	String greeting = "hello";
	String s = greeting.substring(0, 3);
	System.out.println(s);//输出为hel

substring的第二个参数是不想复制的第一个位置,(0,3)则对应取0,1,2。
在Java中通常使用+号进行连接两个字符串:
代码片段

	String a = "123";
	String b = "456";
	String rating = "pg" + b;
	System.out.println(a+b+"和"+rating);//输出123456和pg456

如果需要把多个字符串放在一起,用一个定界符分隔,可以使用静态方法join:
代码片段

	String all = String.join("/", "s","m","l");
	System.out.println(all);//输出s/m/l

通过阅读Java文档,可知由于String类没有提供用于修改字符串的方法,如果希望将上面的greeting的内容修改为help!,不能直接将其最后两个位置的字符直接修改为p!,我们可以利用上面用到的substring方法进行拼接。
代码片段

	String c = greeting.substring(0, 3)+"p!";
	System.out.println(c);//输出为help!

此方法是创建新的字符串,看起来效率确实不高,不过不可变字符串其优点是编译器可以让字符串共享。
我们也可以使用equals方法检测两个字符串是否相等,如果相等返回true,否则返回false:
代码片段

System.out.println(a.equals(rating));//输出false

如果想要检查两个字符串是否相等而不区分大小写,可以使用equalsIgnoreCase方法
代码片段

System.out.println("Abc".equalsIgnoreCase("abc"));//输出为true

不可以使用==运算符检测两个字符串是否相等,此运算符只能确定两个字符串是否放在同一个位置上(有可能内容相同的多个字符串被拷贝在不同的位置)
代码片段

		String str = "";
		//if(str.equals(""))
		if(str.length()==0) {
			System.out.println("t");
		}else {
			System.out.println("f");
		}

如果检查字符串是否为空,则可以使用:
if(str == null)
有时也要检查字符串既不是NULL也不是空串:
if(str == null && str.length() != 0)

码点与代码单元
想得到码点数量可以调用:
int cpCount = greeting.codePointCount(0, greeting.length());
调用.charAt(n)返回位置n的代码单元
得到第n个码点,则调用

		int index = greeting.offsetByCodePoints(0, 3) ;
		int cp = greeting.codePointAt(index);//codePointAt返回给定位置的码点
		System.out.println(cp);//输出108

如果想要遍历一个字符串,并且依次查看每一个码点,可以使用

int[] codePoints = str.codePoints().toArray();

如果要把一个码点数组转换为字符串,可以使用构造函数

String str  = new String(codePoints,0,codePoints.length)

String API

int codePointAt ( int index ) jdk5.0后加入

返回从给定位置开始的码点。

int offsetByCodePoints( int startlndex, int cpCount) jdk5.0后加入

返回从 startlndex 代码点开始,位移 cpCount 后的码点索引。

IntStream codePoints() jdk8后加入

将这个字符串的码点作为一个流返回。调用 toArray 将它们放在一个数组中

new String( int[ ] codePoints, int offset, int count) jdk5.0后加入

用数组中从 offset 开始的 count 个码点构造一个字符串。

int codePointCount( int startIndex, int endIndex ) jdk5.0后加入

返回 startlndex 和 endludex-1之间的代码点数量。没有配成对的代用字符将计入代码点。

构建字符串

每次采用字符串连接都会重新创建一个新的String对象,浪费空间。使用StringBuilder类可避免这类情况
首先创建空的字符串构建器:
StringBuilder builder = new StringBuilder();
每次需要添加一部分就调用append方法
builder.append();
在需要构建字符串时就调用toString方法,可以得到一个String对象,其中包含构造器的字符排序
String completedString = builder.toString();

StringBuilder API

StringBuilder()
构造一个空的字符串构造器

int length()
返回构建器或者缓冲器中的代码单元数量

StringBuilder append(String str)
追加一个字符串并返回this

StringBuilder append(char c)
追加一个代码单元并返回this

StringBuilder appendCodePoint(int cp)
追加一个代码点,将其转换为一个或两个代码单元并返回this

void setCharAt(int i,char c)
将第i个代码单元设置为c

StringBuilder insert(int offset,String str)
在offset位置插入一个字符串并返回this

StringBuilder insert(int offset,Char C)
在offset位置插入一个代码单元并返回this

StringBuilder delete(int startIndex,int endIndex)
删除偏移量从startIndex到-endIndex-1的代码单元并返回this

String toString()
返回一个与构建器或缓冲器内容相同的字符串

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值