这里写目录标题
字符串
Java字符串就是Unicode ( 统一码 )字符序列。
例如:
字符串 “Java\u2122” 是由5个Unicode字符 J、a、v、a和 (商标)TM组成。
\u2122是 Unicode 转义序列,在Unicode中,\u后跟四个16进制数字,表示一个Unicode字符,\u2122 表示 “™”(商标符号)。
Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,就叫String。每个用双引号括起来的字符串都是String类类型。
例如:
String s = ""; //空字符串 String str ="HelloWorld";
子串:
用substring方法在字符串中提取子串
String类的substring( )方法可以从一个较大的字符串中提取出一个子串。
例如:
String str ="HelloWorld"; String s =str.substring(0); //创建了一个由字符“HelloWorld”组成的字符串。 //创建了一个由字符“Hello”组成的字符串。(第一个字符的索引为0) String s2 =str.substring(0,5);
subsString()方法的优点:容易计算子串的长度。subsString(a,b)的长度为 b-a。例如:子串“hello”的长度为: 5-0=5。
substring( )方法的两种重载形式
- 拓展:substring( )方法的两种重载形式:
- 1.substring(int beginIndex ) :
从指定索引开始,截取包括执行索引在内的后面的所有哦字符,并返回一个新的字符串。- 2.substring(int beginIndex , int endIndex) :
从指定的开始索引( beginIndex) 到结束索引( endIndex )之间(不包括结束索引),截取对应的字符,并返回一个新的字符串。
拼接:
用 + 号连接 ( 拼接) 两个字符串
Java语言允许使用 + 号连接 ( 拼接) 两个字符串。
例如:
String example = "interesting"; String example2 = "things"; String Infomation = example+" "+example2; System.out.println(Infomation); //interesting things
当将一个字符串与一个非字符串进行拼接时,后者会自动转换为字符串。这种特性通常出现在输出语句中。
例如:
int age =20; String str="NL" + age; //NL20
用静态join方法将多个字符串进行存放且分隔
如果想要将多个字符串放在一起,用一个界定符分隔,可以用静态join方法。
例如:
//用 / 将SMLXL分隔开 String all = String.join("/","S","M","L","XL"); System.out.println(all); // S/M/L/XL
用repeat方法复制/重复字符串
Java11中,提供了一个复制/重复字符串的repeat( )方法。
例如:
String repeated = "Java".repeat(3); // "Java" System.out.println(repeated); // JavaJavaJava
不可变字符串:
修改字符串中某个字符的方法
String类中没有提供修改字符串中某个字符的方法。String str =“Hello”; 如果希望将str中的内容修改为“Help!”,不能直接将最后两个位置的字符改为‘p’和‘!’。 此时可通过:提取想要保留的子串,再与希望替换的子串拼接。
例如:
String str = "Hello"; str = str.substring(0, 3)+"p!"; // “Help!” System.out.println(str); // Help!
- 由于不能修改Java字符串中的单个字符,所以Java将String类对象称是 : 不可变的。如同数字3就永远是数字3一样,字符串“Hello”永远包含字符H、e、l、l、o,我们不能修改这些值。但可让一个字符串引用另一个字符串,好比:String str = “Hello”; 这时可让str直接=“Help!”。
检测字符串是否相等:
区分大小写检测字符串是否相等
可以使用equals方法检测两个字符串是否相等。如果两个字符串相等则返回true,否则返回false。
进行比较的两者可以是字符串变量,也可以字符串字面量。
例如:
String color = "red"; color.equals(color);//true "Hello".equals(color);//false
不区分大小写检测字符串是否相等
如果想要不区分大小写的检测两个字符串是否相当,可以使用equalsIgnoreCase方法。
例如:
"Hello".equalsIgnoreCase("hello");
不要使用 == 运算符判断两个字符串是否相等
不要使用 == 运算符判断两个字符串是否相等。这个运算符只能确定两个字符串是否存放在同一个位置上。当然,如果字符串存放在同一个位置上,他们必然相等。
但是,完全有可能将内容相等的多个字符串副本放置的在不同的位置上。如果虚拟机始终将相同的子串共享,那就可用 == 检测两个字符串是否相等。
空串与Null串( null ) :
空串
空串是长度为0的字符串。可以用以下代码判断一个字符串是否为空串:
if(str.length()==0){ //长度为0,自然是空串 //为空串 }else{ //不为空串 } if(str.equals("")){ //字符串等于空串自然也是: 空串 //为空串 }else{ //不为空串 }
空格字符长度为1,要与空串( 空字符串) 区分开来。
空串是一个Java对象,有自己的串长度(0) 和内容(空)。
Null串 (null)
String变量还可以存放一个特殊的值,名为null,表示目前没有任何对象与该变量关联。
检查一个字符串是否为空串:
If(str = null){ //为空串 }else{ //不为空串 }
检查一个字符串既不是null也不是空串:
//首先要检查str不为null,如果在一个null值上调用方法,会报错 If(str!=null&&str.length()!=0){ //该字符串不为null也不为空串 }
String类中常用方法 (String API)
Java中的String类包含了50多个方法。下面列举一些常用的String类的方法:
char charAt (int index)
返回指定位置的代码单元。
int codePointAt (int dex)
返回从指定位置开始的码点。
int offsetByCodePoints (int startIndex,int cpCount)
返回从startIndex码点开始,cpCount个码点后的码点索引。
int compareTo (String other)
按照字典顺序,如果字符串位于other之前,返回一个负数; 如果字符串位于other之后,返回一个正数; 如果 两个字符串相等,返回0。
IntStream codePoints()
用这个字符串的码点作为一个流返回。调用toArray将它们放在一个数组中。
- new String(int [] codePoints,int offset,int count)
用数组中从offset开始的count个码点构建一个字符串。
boolean empty()
boolean blank()
如果字符串为空或由空格组成,返回true
- boolean equals(Object other)
如果字符串与other相等,返回true
- boolean equalsIgnoreCase(Object other)
如果字符串与other相等(忽略大小写),返回true
boolean startsWith(String prefix)
boolean endWith (String suffix)
如果字符串以prefix开够或以suffix或结尾,则返回true。
int indexOf (String str)
int indexOf (String str,int fromIndex)
int indexOf (int cp)
int indexOf (int cp,int fromIndex)
返回与字符串Str或码点cp匹配的第一个子串的开始位置。从索引0或fromIndex开始匹配。如果在原始字符串中不存在str,则返回-1。
int lastIndexOf (String str)
int lastIndexOf (String str,int fromIndex)
int lastindexOf (int cp)
int lastindexOf (int cp,int fromIndex)
返回与字符串Str或码点cp匹配的最后一个子串的开始位置。从原始字符串末尾或fromIndex开始匹配。
- int length( )
返回字符串代码单元的个数。
- int codePointCount(int startIndex,int endIndex)
返回startIndex 和 endIndex-1之间的码点个数。
- String replace (CharSequence oldString,CharSequence newString)
返回一个字符串,这个字符串用newString代代原始字符串中所有的oldString。可以用String或StringBuilder对象作为CharSequence参数。
- String substring( int beginIndex)
返回一个字符串,包含从beginIndex到字符串末尾的所有字符。
- String substring( int beginIndex,int endIndex)
返回一个字符串,包含从beginIndex到endIndex-1的所有字符。
- String toLowerCase( )
将原始字符串中的大写字母改为小写字母。
- String toUpperCase( )
将原始字符中的所有小写字符改成大写字符。
String trim( )
String strip( )
这个字符串将删除原始字符串头部和尾部小于等于U+0020的字符(trim) 或空格(strip)。
- String join(CharSequence delimiter ,CharSequence… elements)
用给定的定界符连接所有元素。
- String repeat( int count)
将当前字符串重复/复制count次。
查看StringAPI文档
- 可以从Oracle下载API文档,并保存到本地。
- 也可在浏览器中访问:https://docs.oracle.com/javase/9/docs/api
构建字符串 (StringBuffer):
有些时候,需要较短的字符串构建字符串,如:按键或来自文件中的单词。如果采用字符串拼接的方式来达到这个目的,效率会比较低。每次拼接字符串时候,都会构建一个新的String对象,既耗时,又耗费空间。使用StringBuilder可以解决这个问题。
用许多小段的字符串来构建一个字符串
String ch = "Hello"; String str = "World"; String str2 = "..."; //构建一个空的 字符串构建器 StringBuilder builder = new StringBuilder(); //当每次需要添加一部分内容时,就调用append方法 builder.append(ch); builder.append(str); builder.append(str2); //当字符串构建完成时就调用toString方法,将可以得到一个String对象,其中包含了构造器中的字符序列。 String completeString = builder.toString(); //HelloWorld...
StringBuffer类中常用的重要方法:
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)
在offet位置插入一个字符串并返回this
StringBuilder insert(int offset .char c)
在offet位置插入一个字代码单元并返回this
StringBuilder delete(int startIndex ,int endIndex)
删除偏移量从startIndex 到startIndex -1的代码单元并返回this
String toString()
返回一个与构建器或缓冲器内容相同的字符串。