从概念上来说,String字符串就是Unicode字符序列。(例如,串“Java\u2122”)由五个Unicode字符J、a、v、a和TM。Java中没有内置的字符串类型,而是在标准的Java类库中提供了一个预定义类,很自然的叫做String。

String类实例化方式 

 String类是引用类型,该类实例化方式有两种:

1、直接赋值

java 字符串格式unicode java string unicode_System

这种方式会出现常量池数据共享的情况。上述代码执行“String str1 = ”abc“;”后,JVM在常量池中开辟空间存放一个abc字符串空间并让str1指向该对象;

java 字符串格式unicode java string unicode_java 字符串格式unicode_02

执行“String str2 = ”abc“;”时,JVM会先检查常量池中是否已经存在了一内容为abc的空间,如果存在就直接让str2指向该空间,否则就会在开辟一个新的空间存放该字符串,上面的代码等同于下面代码:

java 字符串格式unicode java string unicode_bc_03

下面代码的jvm执行过程:

java 字符串格式unicode java string unicode_bc_04

执行“String str1 = ”abc“;”后,JVM在常量池中开辟空间存放一个abc字符串空间并让str1指向该对象;         2、执行“String str2 = ”abc“;”时,JVM会先检查常量池中是否已经存在了一个内容为abc的空间,如果存在就直接让str2指向该空间,否则就会在开辟一个新的空间存放该字符串;         3、执行“String str3 = ”def“;”时,JVM会先检查常量池中是否已经存在了一个内容为def的空间,由于不存在,所以JVM在常量池中新开辟一个空间存放def并让str3指向该空间;

2、构造方法实现实例化

java 字符串格式unicode java string unicode_字符串_05

这种方式每new一次就会创建一个新的对象。下面代码jvm的执行过程:

java 字符串格式unicode java string unicode_System_06

  1、执行“String str = ”abc“;”后,JVM在常量池中开辟存放abc的空间并让str指向该空间;         2、执行“String str1 = new String(str);”时,JVM直接创建一个新的对象并让str1指向该对象;         3、执行“String str2 = new String(str);”时,JVM再次创建一个新的对象并让str2指向该对象;

String类中常用的方法 

1、 indexOf

     indexOf(String str) 

     indexOf(String str,int fromIndex)

     indexOf(int cp)

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

2、lastIndexOf

     lastIndexOf(String str)

     lastIndexOf(String str,int fromIndex)

     lastIndexOf(int cp)

     lastIndexOf(int cp,int fromIndex)返回与字符串str或代码点cp匹配的最后一个子串的开始位置。这个位置从原始串尾端或fromIndex开始计算

public class Test { public static void main(String[] args) { String a="aaabbbaaacccc"; System.out.println( a.indexOf("a"));//0 System.out.println( a.indexOf("a",2));//2 System.out.println( a.lastIndexOf("a"));//8 System.out.println( a.lastIndexOf("a",2));//2 } }

3、contains()

该方法是判断字符串中是否有子字符串。如果有则返回true,如果没有则返回false。

public class Test { public static void main(String[] args) { String a="aaabbbaaacccc"; String b = "aa"; System.out.println(a.contains(b)); System.out.println(b.contains(a)); } }

运行结果:

java 字符串格式unicode java string unicode_bc_07

4、split(String sign)

分割字符串,split方法返回的是数组类型,该数组由目标字符串根据sign拆分得到。

public class Test { public static void main(String[] args) { String a="aaabaaabcccbbbc"; String[] array = a.split("b"); int i=0; for (String arr:array) { System.out.println(arr); i++; } System.out.println("------->"+i); } }

运行结果:

java 字符串格式unicode java string unicode_System_08

5、startsWith 和endWith

boolean startsWith (String prefix)

boolean  endWith (String prefix)     如果字符串以suffix开头或者结尾,则返回true

java 字符串格式unicode java string unicode_System_09

java 字符串格式unicode java string unicode_java 字符串格式unicode_10

6、subString

String subString(int start)返回当前字符串从start开始截取到当前字符串末尾的部分。

String subString(int start,int end)返回当前字符串,从start开始截取到end之前的部分。

String类中的subString方法可以从一个较大的字符串中提取出一个子串。

public class Test { public static void main(String[] args) { String a="aaabaaabcccbbbc"; String s=a.substring(4); System.out.println(s); String u=a.substring(4,6); System.out.println(u); } }

运行结果:

java 字符串格式unicode java string unicode_java 字符串格式unicode_11

7、getBytes()方法

得到一个操作系统默认的编码格式的字节数组。这表示在不同的操作系统下,返回的东西不一样!

8、toCharArray()

将字符串转换为char类型的数组:

public class Test { public static void main(String[] args) { String a="aaab"; char[]str= a.toCharArray(); for (char s:str ) { System.out.println(s); } } }

运行结果:

java 字符串格式unicode java string unicode_字符串_12

9、String replaceAll(String old, String new) 

返回当前字符串用new替换old的结果

10、String trim()

返回去掉当前字符串左右两端空格后的字符串,注意:当前字符串中间空格不会去掉。

java 字符串格式unicode java string unicode_字符串_13

运行结果:

java 字符串格式unicode java string unicode_java 字符串格式unicode_14

10、int length() 返回字符串的长度

空串与null串

空串“”是长度为0的字符串 ,空串是一个Java对象,有自己的串长度为0和内容为空。

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

11、字符串拼接

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

注意:单词之间没有空格

public class Test { public static void main(String[] args) { String a=" aabb"; String str="AABB"; System.out.println(a+str); } }

运行结果 :

java 字符串格式unicode java string unicode_System_15

将一个字符串和一个非字符串的值进行拼接,后者被转换成字符串

public class Test { public static void main(String[] args) { String a=" aabb"; int num=13; System.out.println(a+num); } }

运行结果: 

java 字符串格式unicode java string unicode_bc_16

12、静态join方法

String join(CharSequence delimiter,charSequence...elements),返回一个新字符串,用给定的定界符连接所有元素。

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

java 字符串格式unicode java string unicode_bc_17

运行结果:

java 字符串格式unicode java string unicode_bc_18

13、equals

equals(String targetString) 用于判断两个字符串是否相同,完全相同返回true,否则返回false:

java 字符串格式unicode java string unicode_bc_19

String 类equals方法和==区别:

String类中的equals方法用于判断两个字符串内容是否相同:

java 字符串格式unicode java string unicode_java 字符串格式unicode_20

如果所比较的两个变量是引用类型,则==用于比对两个变量指向的是否为同一个存放数据的地址;如果是基本数据类型的两个变量进行比较,则比较的是值是否相等:

java 字符串格式unicode java string unicode_bc_21

14、equalsIgnoreCase

Boolean equalsIgnoreCase (String value) 用于判断两个字符串忽略大小写后是否相同,相同返回true,否则返回false:

java 字符串格式unicode java string unicode_java 字符串格式unicode_22