java字符串

目录

子串

拼接

不可变字符串

检验字符串是否相等

注:equals比较的是值相等,==比较的是位置相同

空串与Nill串

if(str.length()==0)或if(str.equals(""))

String变量还可以存放一个特殊的值,名为null,这表示目前没有任何对象与该变量关联

if(str==null)

if(str!==null&&str.length()!=0):

码点和代码单元

String str = "hello";

int n = str.length();//n = 5

int cpCount = str.codePointCount(0,str.length());

String str = "hello";

char ch = str.charAt(0);//ch = 'h'

构建字符串

StringBuilder builder = new StringBuilder();

builder.append(ch);//appends a single character

builder.append(str);//appends a string

String str = builder.toString();

StringBuilder API文档:


Java字符串就是Unicode字符序列

Java没有内置的字符串类型,在标准Java类库中提供了一个预定义类,叫做String

每个用双引号括起来的字符串都是String类的一个实例:

子串

String类的实例方法substring():提取一个子串

##substring(0,3):从0开始到2(不包括3)

String str = “Hello”;
String s = str.substring(0,3);


//s="Hel"

拼接

用“+”拼接字符串

如果非字符串和字符串用“+”拼接时,非字符串会自动转换为字符串(任何一个java对象都可以转换为字符串)

int num = 3;
String s = "abc"+num;


//s = "abc3"; 

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

String all = String.join("/","S","M","L","XL");

// all = "S/M/L/X/L"

join的API文档:

public static String join(CharSequence delimiter,
                          CharSequence... elements)返回一个新的字符串,由CharSequence elements的副本组成,并附有指定的delimiter的delimiter 。 
For example, 

     String message = String.join("-", "Java", "is", "cool");
     // message returned is: "Java-is-cool"
 请注意,如果元素为空,则添加"null" 。 
参数 
delimiter - 分隔每个元素的分隔符 
elements - 要加入的元素。 
结果 
一个新的 String ,其由所述的 elements由分离 delimiter 
异常 
NullPointerException - 如果 delimiter或 elements是 null 

不可变字符串

String类没有提供用于修改字符串的方法。如果希望将greeting的内容修改为“Help! ”,不能直接地将greeting的最后两个位置的字符修改为‘p’和‘! '

如何修改这个字符串呢?在Java中实现这项操作非常容易。首先提取需要的字符,然后再拼接上替换的字符串:

String str = "hello,";
String s = str.substring(0,str.length())+"world!";


//s = "hello,world!"

String对象是不可变字符串

不可变字符串却有一个优点:编译器可以让字符串共享。

共享带来的高效率远远胜过于提取、拼接字符串所带来的低效率

很少需要修改字符串,而是往往需要对字符串进行比较(有一种例外情况,将来自于文件或键盘的单个字符或较短的字符串汇集成字符串。为此,Java提供了一个独立的类

检验字符串是否相等

equals方法检验两个字符串是否相等

s.equals(t)--相等返回True

“Hellp”.equals(str)

如果不区分大小写:"Hello".equalsIgnoreCase("hello")

一定不要使用==运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串是否放置在同一个位置上,当然,如果字符串放置在同一个位置上,它们必然相等。但是,完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上。

注:equals比较的是值相等,==比较的是位置相同

如果虚拟机始终将相同的字符串共享,就可以使用 == 运算符检测是否相等,但实际上只有字符串常量是共享的,而 + 或 substring 等操作产生的结果并不是共享的,但实际上只有字符串常量是共享的,而 + 或 substring 等操作产生的结果并不是共享的

空串与Nill串

空串“”是长度为0的字符串,

可用如下代码检验字符串是否为空:

if(str.length()==0)或if(str.equals(""))

空串是一个Java对象,有自己的串长度(0)和内容(空)

String变量还可以存放一个特殊的值,名为null,这表示目前没有任何对象与该变量关联

要检查一个字符串是否为null,要使用以下条件:

if(str==null)

有时要检查一个字符串既不是null也不为空串,这种情况下就需要使用以下条件:

if(str!==null&&str.length()!=0):

有时要检查一个字符串既不是null也不为空串,这种情况下就需要使用以下条件:

码点和代码单元

Java字符串由char值序列组成,char数据类型是一个采用UTF-16编码表示Unicode码点的代码单元,length方法将返回采用UTF-16编码表示的给定字符串所需要的代码单元数量

length方法将返回采用UTF-16编码表示的给定字符串所需要的代码单元数量:

String str = "hello";

int n = str.length();//n = 5

要想得到实际的长度,即码点数量,可以调用:

int cpCount = str.codePointCount(0,str.length());

调用s.charAt(n)将返回位置n的代码单元,n介于0~s.length()-1之间。例如:

String str = "hello";

char ch = str.charAt(0);//ch = 'h'

要想得到第i个码点,应该使用下列语句

int index = str.offsetByCodePoints(0,i);

int cp = str.codePointAt(index);

构建字符串

使用StringBuilder类(JDK5.0引入的,前身是StringBuffer)可以避免(有些时候,需要由较短的字符串构建字符串,例如,按键或来自文件中的单词。采用字符串连接的方式达到此目的效率比较低。每次连接字符串,都会构建一个新的String对象,既耗时,又浪费空间)

如果需要用许多小段的字符串构建一个字符串,那么应该按照下列步骤进行。首先,构建一个空的字符串构建器:

StringBuilder builder = new StringBuilder();

当每次需要添加一部分内容时,就调用append方法:

builder.append(ch);//appends a single character

builder.append(str);//appends a string

构建字符串时就调用toString方法,将可以得到一个String对象:

String str = builder.toString();

###注释:在JDK5.0中引入StringBuilder类。这个类的前身是StringBuffer,其效率稍有些低,但允许采用多线程的方式执行添加或删除字符的操作。如果所有字符串在一个单线程中编辑(通常都是这样),则应该用StringBuilder替代它。这两个类的API是相同的。

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, intendIndex)删除偏移量从startIndex到-endIndex-1的代码单元并返回this。

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

*
*
*

参考文献:java核心技术卷一

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值