Java知识点——字符串

Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然地叫做String。每个用双引号括起来的字符串都是String类的一个实例

	String e="";				//一个空的字符串
	String greeting="Hello";		

子串

String 类的 substring 方法可以从一个较大的字符串提取出一个子串。例如:

	String greeting="Hello";	
	String s=greeting.substring(0,3);	//等价于s="Hel";	

substring 方法的第二个参数是不想复制的第一个位置。在 substring 中从 0 开始计数,直到 3 为止, 但不包含 3。字符串 s.substring(a, b) 的长度为 b-a。

拼接

与绝大多数的程序设计语言一样,Java语言允许使用 + 号连接(拼接)两个字符串

	String expletive = "Expletive";
	String PC13 = "deleted";
	String message = expletive + PC13;		//等价于 message = "Expletivedeleted"

当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串。如果需要把多个字符串放在一起, 用一个定界符分隔,可以使用静态 join 方法

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

不可变字符串

String 类没有提供用于修改字符串的方法。由于不能修改 Java 字符串中的字符, 所以在 Java 文档中将 String 类对象称为不可变字符串, 如同数字 3 永远是数字 3。

检测字符串是否相等

可以使用 equals 方法检测两个字符串是否相等。对于表达式:

 s.equals(t)

如果字符串 s 与字符串 t 相等, 则返回 true ; 否则, 返回 false。需要注意,s与 t 可以是字符串变量, 也可以是字符串字面量。例如:

"Hello".equals(greeting)

要想检测两个字符串是否相等,而不区分大小写, 可以使用 equalsIgnoreCase 方法

"Hello".equalsIgnoreCase("hello")

一定不要使用==运算符检测两个字符串是否相等! 这个运算符只能够确定两个字串是否放置在同一个位置上。

空串与Null串

空串 “” 是长度为0的字符串。可以调用以下代码检查一个字符串是否为空:

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

空串是一个 Java 对象, 有自己的串长度( 0 ) 和内容(空)。不过, String 变量还可以存放一个特殊的值, 名为 null, 这表示目前没有任何对象与该变量关联。要检查一个字符串是否为 null, 要使用以下条件:

if(str==null)

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

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

首先要检查 str 不为 null。

码点与代码单元

Java 字符串由 char 值序列组成。 char 数据类型是一个采用 UTF-16 编码表示 Unicode 码点的代码单元。大多数的常用 Unicode 字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。
length 方法将返回采用 UTF-16 编码表示的给定字符串所需要的代码单元数量

	String greeting="Hello";
	int n =greeting.length();	//5

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

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

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

String API

Java 中的 String类包含了 50 多个方法。令人惊讶的是绝大多数都很有用, 可以设想使用的频繁非常高。下面的 API 注释汇总了一部分最常用的方法。

方法名实现功能
char charAt (int index)返回给定位置的代码单元。除非对底层的代码单元感兴趣, 否则不需要调用这个方法
int codePointAt(int Index) 5.0返回从给定位置开始的码点
int offsetByCodePoints(int startlndex, int cpCount) 5.0返回从 startlndex 代码点开始,位移 cpCount 后的码点索引
int compareTo(String other)按照字典顺序,如果字符串位于 other 之前, 返回一个负数;如果字符串位于 other 之 后,返回一个正数;如果两个字符串相等,返回 0。
IntStream codePoints() 8将这个字符串的码点作为一个流返回。调用 toArray 将它们放在一个数组中
new String(int[] codePoints, int offset, int count) 5.0用数组中从 offset 开始的 count 个码点构造一个字符串。
boolean equals(0bject other)如果字符串与 other 相等, 返回 true
boolean equalsIgnoreCase(String other )如果字符串与 other 相等 ( 忽略大小写,) 返回 true
boolean startsWith(String prefix )如果字符串以prefix开头则返回 true
boolean endsWith(String suffix )如果字符串以suffix 结尾则返回 true
int indexOf(String str)返回与字符串 str匹配的第一个子串的开始位置。这个位置从索引 0 开始计算。 如果在原始串中不存在 str,返回 -1
int indexOf(String str, int fromlndex )返回与字符串 str 匹配的第一个子串的开始位置。这个位置从fromlndex 开始计算
int indexOf(int cp)返回与字符串 str 或代码点 cp 匹配的第一个子串的开始位置。这个位置从索引 0 或fromlndex 开始计算
int indexOf(int cp, int fromlndex )返回与代码点 cp 匹配的第一个子串的开始位置。这个位置从fromlndex 开始计算
int lastIndexOf(String str)返回与字符串 str 匹配的最后一个子串的开始位置。 这个位置从原始串尾端开始计算
int lastIndexOf(String str, int fromlndex )返回与字符串 str 匹配的最后一个子串的开始位置。 这个位置从 fromlndex 开始计算
int lastindexOf(int cp)返回与代码点 cp 匹配的最后一个子串的开始位置。 这个位置从原始串尾端开始计算
int lastindexOf(int cp, int fromlndex )返回与代码点 cp 匹配的最后一个子串的开始位置。 这个位置 fromlndex 开始计算
int length( )返回字符串的长度
int codePointCount(int startlndex , int endlndex )返回 startlndex 和 endIndex之间的代码点数量。没有配成对的代用字符将计入代码点
String replace( CharSequence oldString,CharSequence newString)返回一个新字符串。这个字符串用 newString 代替原始字符串中所有的 oldString
String substring(int beginlndex )返回一个新字符串。这个字符串包含原始字符串中从 beginlndex 到串尾的所有代码单元。
String substring(int beginlndex, int endlndex )返回一个新字符串,这个字符串包含原始字符串中从 beginlndex 到 endlndex-1的所有代码单元。
String toLowerCase( )返回一个新字符串, 这个字符串将原始字符串中的大写字母改为小写
String toUpperCase( )返回一个新字符串, 这个字符串将原始字符串中的小写字母改成大写字母
String trim( )返回一个新字符串。这个字符串将删除原始字符串头部和尾部的空格
String join(CharSequence delimiter, CharSequence … elements )返回一个新字符串, 用给定的定界符连接所有元素

阅读API文档

正如前面所看到的, String 类包含许多方法。 而且, 在标准库中有几千个类, 方法数量更加惊人。要想记住所有的类和方法是一件不太不可能的事情。 因此,学会使用在线 API 文档十分重要,从中可以查阅到标准类库中的所有类和方法。API文档是 JDK 的一部分, 它是HTML 格式的。就可以看到如图所示的屏幕:
在这里插入图片描述
可以看到,屏幕被分成 3个窗框。在左上方的小窗框中显示了可使用的所有包。在它下面稍大的窗框中列出了所有的类。点击任何一个类名之后,这个类的 API 文档就会显示在右侧的大窗框中。例如,要获得有关 String 类方法的更多信息,可以滚动第二个窗框,直到看见 String 链接为止,然后点击这个链接。如下图所示
在这里插入图片描述

构建字符串

有些时候, 需要由较短的字符串构建字符串。每次连接字符串, 都会构建一个新的 String 对象,既耗时,又浪费空间。使用 StringBuilder类就可以避免这个问题的发生。可以按照下列步骤进行:

	StringBuilder builder =new StringBuilder();
	builder.append(ch);		
	builder.append(str);
	String completedString =builder.toString();

下面的API注释包含了StringBuilder类中的重要方法

方法名实现功能
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 endlndex)删除偏移量从 startindex 到 endlndex-1 的代码单元并返回 this
String toString()返回一个与构建器或缓冲器内容相同的字符串
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值