Java String字符串大全

Java 字符串

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

1. 子串

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

String greeting = "Hello World!";
String s1 = greeting.substring(0,3); // s1 = "Hel"
String s2 = greeting.substring(2,7); // s2 = "llo W"

substring方法的第二个参数是不想复制的第一个位置。在s1从0开始计数,直到3为止,但不包含3。s2从2开始,到7为止,但不包括7。

子串的长度:greeting.substring(a,b)的长度为b-a。

2.拼接

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

String s = "Hello";
int x = 3;
int y = 6;
System.out.println(s + "World");
System.out.println(s + x + y);
System.out.println(x + s + y);
System.out.println(x + y + s);
System.out.println(s + (x + y));

输出

HelloWorld
Hello36
3Hello6
9Hello
Hello9

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

String all = String.join("/", "A", "B", "C", "D");
System.out.println(all);
A/B/C/D

3. 不可变字符串

String类没有提供用于修改字符串的方法。如果希望将greeting="Hello"的内容修改为“Help!”,不能直接地将greeting的最后两个位置的字符修改为‘p’和’!’。正确方法是先提取需要的字符,然后再拼接上替换的字符串:

String greeting = "Hello";
greeting = greeting.substring(0, 3) + "p!";

不可变字符串却有一个优点:编译器可以让字符串共享。查看一下程序会发现:很少需要修改字符串,而是往往需要对字符串进行比较。

4.检测字符串是否相等

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

s.equals(t)

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

"Hello".equals(greeting)

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

"Hello".equalsIgnoreCase("hello")

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

String greeting = "Hello"; //initialize greeting to a string 
if (greeting == "Hello") 
// probably true 
if (greeting.substring(0, 3) == "Hel) 
// probably false

C程序员从不使用=对字符串进行比较,而使用strcmp函数。Java的compareTo方法与strcmp完全类似,因此,可以这样使用:

if (greeting.compareTo("Hello) == 0);

不过,使用equals看起来更为清晰。

5.空串与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。如果在一个null值上调用方法,会出现错误。

6.码点与代码单元

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

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

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

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

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

char first = greeting.charAt(0); // first is 'H' 
char last = greeting.charAt(4); // last is ’o’ 

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

int index = greeting.offsetByCodePoints(0, i); 
int cp = greeting.codePointAt(index);

7.String API

Java中的String类包含了50多个方法,绝大多数都很有用。下面的API注释汇总了一部分最常用的方法。
char charAt (int index)
返回给定位置的代码单元。除非对底层的代码单元感兴趣,否则不需要调用这个方法。
• int codePointAt(int Index)
返回从给定位置开始的码点。
• int offsetByCodePoints(int startlndex, int cpCount)
返回从startlndex代码点开始,位移cpCount后的码点索引。
• int compareTo(String other)
按照字典顺序,如果字符串位于other之前,返回一个负数;如果字符串位于other之后,返回一个正数;如果两个字符串相等,返回0。
• IntStream codePoints()
将这个字符串的码点作为一个流返回。调用toArray将它们放在一个数组中。
• new String(int[] codePoints, int offset, int count)
用数组中从offset开始的count个码点构造一个字符串。
• boolean equals(object other)
如果字符串与other相等,返回true。
•boolean equalsIgnoreCase(String other )
如果字符串与other相等(忽略大小写,)返回true。
•boolean startsWith(String prefix )
•boolean endsWith(String suffix )

如果字符串以suffix开头或结尾,则返回true。
•int indexOf(String str)
•int indexOf(String str, int fromlndex )
•int indexOf(int cp)
•int indexOf(int cp, int fromlndex )

返回与字符串str或代码点cp匹配的第一个子串的开始位置。这个位置从索引0或fromlndex开始计算。如果在原始串中不存在str,返回-1。
•int lastIndexOf(String str)
•Int lastIndexOf(String str, int fromlndex )
•int lastindexOf(int cp)
•int lastindexOf(int cp, int fromlndex )

返回与字符串str或代码点cp匹配的最后一个子串的开始位置。这个位置从原始串尾端或fromlndex开始计算。
•int length( )
返回字符串的长度。
•int codePointCount(int startlndex , int endlndex )
返回startlndex和endlndex-1之间的代码点数量。没有配成对的代用字符将计入代码点。
•String replace( CharSequence oldString,CharSequence newString)
返回一个新字符串。这个字符串用newString 代替原始字符串中所有的oldString。可以用String或StringBuilder对象作为CharSequence参数。
•String substring(int beginlndex )
•String substring(int beginlndex, int endlndex )

返回一个新字符串。这个字符串包含原始字符串中从beginlndex到串尾或endlndex-1的所有代码单元。
•String toLowerCase( )
•String toUpperCase( )

返回一个新字符串。这个字符串将原始字符串中的大写字母改为小写,或者将原始字符串中的所有小写字母改成了大写字母。
•String trim( )
返回一个新字符串。这个字符串将删除了原始字符串头部和尾部的空格。
• String join(CharSequence delimiter, CharSequence … elements )
返回一个新字符串,用给定的定界符连接所有元素。

构建字符串有些时候,需要由较短的字符串构建字符串,例如,按键或来自文件中的单词。采用字符串连接的方式达到此目的效率比较低。每次连接字符串,都会构建一个新的String对象,既耗时,又浪费空间。使用StringBuildei类就可以避免这个问题的发生。
如果需要用许多小段的字符串构建一个字符串,那么应该按照下列步骤进行。首先,构建一个空的字符串构建器:
StringBuilder builder = new StringBuilder();
当每次需要添加一部分内容时,就调用append方法。

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

在需要构建字符串时就凋用toString方法,将可以得到一个String对象,其中包含了构建器中的字符序列。
String completedString = builder.toString();
注释: 在JDK5.0中引入StringBuilder类。这个类的前身是StringBuffer,其效率稍有些低,但允许采用多线程的方式执行添加或删除字符的操作。如果所有字符串在一个单线程中编辑(通常都是这样),则应该用StringBuilder替代它。这两个类的API是相同的。
下面的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 endindex)
删除偏移量从startindex到endlndex-1的代码单元并返回this。
• String toString()
返回一个与构建器或缓冲器内容相同的字符串

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brave Seeker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值