Java学习笔记2:String类

Java学习笔记2:String类

在Java中没有内置的字符串类型,而是在标准Java库中提供了一个预定义类。String是一种引用数据类型,主要有以下常见的几种操作:

1. 字符串长度

在Java中,使用方法length求字符串的的长度,例如:

String a = "abcdef";
int len = a.length();//a为6

注意lengthlength()看起来相似,但是前者主要用于求解数组大小,例如:

String[] a = new String{"aa","bb","cc","dd","ee"};
int Len = a.length;//a为5

2.子串(substring)

substring方法可以在一个字符串中取其子串,需要两个参数。第一个参数为起始位置,第二个参数为终止位置的下一位。

下述代码将创建一个“Hel"字符:

String s = "Hello world!";
String subs = s.substring(0,3);

3. 拼接

  1. 与绝大部分语言类似,java支持使用+对字符串进行直接拼接,例如:

    String first = "Hello";
    String second = "World!";
    String a = first + second;//a为"HelloWorld!"
    

    String类型也可以和其他类型数据进行拼接,优先级与加法运算优先级相同,且计算结果为String类型:

    int age = 19;
    String s = "I'm ";
    String a = s + age;//a为“I'm 19"
    
  2. 若需要进行多个字符串的拼接,可以使用方法join:

    String a = String.join("I"," ","can"," ","do"," ","it",".");
    //a为"I can do it."
    

4. 不可变字符串

Java 中不可以直接修改字符串中的字符,因此称String类对象为不可变字符串.

5. 检测字符串是否相等

可以直接使用equals方法判断两个字符串是否相等,如果相等则返回true,反之,则返回false:

s.equals(t);//判断字符串s和t是否相等

也可直接使用字符串字面量:

"Hello World!".equals(s);//判断字符串"Hello World!"和s是否相等

如果不区分大小写,则可以使用方法equalsIgnoreCase:

"Hello World!".equalsIgnoreCase("hello world!");//返回true

注意:与C++不同,java中一定不可以使用运算符==来检测两个字符串是否相等,这个运算符只能检测两个变量是否代表相同位置的字符串。

6.字符串比较

使用compareTo方法进行字符串比较,与C++中的strcmp完全类似。以s.compareTo(t)的返回值为例:

s >t1
s=t0
s<t-1

以上比较为字典序比较,具体比较规则见百度百科

7. 空串和NULL串

空串""是长度为0的字符串,是一个java对象,表示长度为0的内容为空的字符串,用如下方法判断空串:

if(str.length()==0)

或者:

if(str.equals(""))

NULL为存放null的String变量,表示目前还没有任何对象与该变量关联,用如下方法检验:

if(str==null)

8.码点与代码单元

Java字符串由char值序列组成。char数据类型是一个采用utf-16编码表示Unicode码点的代码单元。大多数常用Unicode字符使用1个代码单元就可以表示,而辅助字符需要2个代码单元进行表示。

length方法返回采用UTF-16编码表示的给定字符串所需要的代码单元数量;codePointCount方法则返回实际的长度,即码点数量。如下:

String a = "Hello𝕗";
System.out.println(a.length());//代码单元数为7  最后一个字符占2个代码单元,为1个码点
System.out.println(a.codePointCount(0,a.length()));//码点个数为6

charAt方法将返回传入位置的代码单元;使用offsetBycodePointscodePointAt将得到得到传入位置的码点,例如:

char sec = a.charAt(2);//sec为'e'
int index1 = a.offsetByCodePoints(0,2);
int index2 = a.offsetByCodePoints(0,5);
int cp1 = a.codePointAt(index1);//cp1为'e'所对十进制编码108
int cp2 = a.codePointAt(index2);//cp2为'𝕗'所对十进制编码120152

因此,逐字符遍历字符串时不能以代码单元为跨度

9. String API

String类常用方法,见官方文档click here

10.构建字符串

有些时候,需要由较短的字符串构建字符串,可以通过如下方式:

首先,创建一个空的字符串构建器:

StringBuilder builder = new StringBuilder();

当每次需要添加一部分元素时,调用append方法:

builder.append(ch);
builder.append(str);

最后使用toString方法得到一个String对象:

String str = bulider.toString();

API官方文档,click here,下为常用例子:

类型名称解释
voidStringBuilder()构造一个空的字符串构建器
intlength()返回构建器或缓冲器的代码单元数量
StringBuilderappend(String str)追加一个字符串并返回this
StringBuilderappend(char c)追加一个代码单元并返回this
StringBuilderappendCodePoint(int cp)追加一个代码点,并将其转换为一个或两个代码单元并返回this
voidsetCharAt(int i,char c)将第i个代码单元设置为c
StringBuilderinsert(int offset, char c)在offset位置插入一个代码单元并返回this
StringBuilderinsert(int offset, String str)在offset位置插入一个字符串并返回this
StringBuilderdelete(int startIndex,int endIndex)删除偏移量从startIndex到endIndex-1的代码单元并返回this
StringtoString()返回一个与构建器或缓冲器内容相同的字符串

单线程推荐使用StringBuilder对象,速度比较快;多线程推荐使用StringBuff,安全性更好。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值