(七)JAVA基础学习第七篇章——JAVA字符串

Java中的字符串
java中的字符串是由双引号括起来的多个字符。
Java SE提供了三个字符串类:String、StringBuffer和StringBuilder。String是不可变字符串,StringBuffer和StringBuilder是可变字符串。
注意:单个字符如果双引号括起来则其表示的是字符串,而不是字符了。字符串还有一个极端的情况,就是双引号中没有任何内容表示空字符串,空字符串不是null,空字符串是分配了内存空间,而null是没有分配任何内存空间的。

不可变字符串

String
java中的不可变字符串是String,属于java.lang包。
提示:java.lang包中提供了很多java基础类,包括Object、Class、String和Math等基本类。在使用java.lang包中的类是不需要引入(import)该包,因为它是由解释器自动引入的。当然,引入java.lang包程序也不会有编译错误。
创建字符串对象示例代码如下:
(七)JAVA基础学习第七篇章——JAVA字符串
(七)JAVA基础学习第七篇章——JAVA字符串
字符串池
(七)JAVA基础学习第七篇章——JAVA字符串
使用new关键字与字符串常量都能获得字符串对象,但他们之间有一些区别。
(七)JAVA基础学习第七篇章——JAVA字符串
java中的不可变字符串String常量采用的是字符串池(String Pool)管理技术,字符串池是一种字符串驻留技术。采用字符串常量赋值时,会在字符串池中查找“Hello”字符串常量,如果已经存在,则把引用赋值给s9,否则创建“Hello”字符串对象,并放到池中。根据此原理,可以推定s10与s9是相同的引用,指向同一个对象。但此原理并不适用于new所创建的字符串对象,s7会创建“Hello”字符串对象,而它并没有放到字符串池中;s8又创建一个新的“Hello”字符串对象,所以s7和s8是不同的引用,指向不同的对象。
(七)JAVA基础学习第七篇章——JAVA字符串
字符串拼接
String字符串虽然是不可变字符串,但也可以进行拼接,只是会产生一个新的对象。String字符串拼接可以使用+运算或concat方法。+运算的优势是可以连接任何类型数据拼接成为字符串,而concat方法只能拼接String类型字符串。
(七)JAVA基础学习第七篇章——JAVA字符串
字符串查找

  • int indexOf(int ch):从前往后搜索字符ch,返回第一次找到字符ch所在处的索引。

  • int indexOf(int ch,int fromIndex):从指定的索引开始从前往后搜索字符ch,返回第一次找到字符ch所在处的索引。

  • int lastIndexOf(int ch):从后往前搜索字符ch,返回第一次找到字符ch所在处的索引。

  • int lastIndexOf(int ch,int fromIdex):从指定的索引开始从后往前搜索字符ch,返回第一次找到字符ch所在处的索引。
    提示:字符串本质上是字符数组,因此它也有索引,索引从0开始。返回值如果为-1表示没有找到。String的charAt(int index)方法可以返回索引index所在处的字符。
    字符串比较
    1.比较相等

  • boolean equals(Object anObject):比较两个字符串中内容是否相等。

  • boolean equalsIgnoreCase(String anotherString):类似equals方法,只是忽略大小写。
    例如:s1.equals(s2);
    2.比较大小

  • int compareTo(String anotherString):按字典顺序比较两个字符串。如果参数字符串等于此字符,则返回值0;如果此字符串小于参数字符串,则返回一个小于0的值;如果此字符串大于参数字符串,则返回一个大于0的值。

  • int compareToIgnoreCase(String str):类似于compareTo,只是忽略大小写。
    例如:s1.compareTo(s2);
    3.比较前缀和后缀

  • boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。

  • boolean startsWith(String prefix):测试此字符串是否以指定的前缀结束。
    字符串截取

  • String substring(int beginIndex):从指定索引beginIndex开始截取一直到字符串结束的子字符串。

  • String substring(int beginIndex,int endIndex):从指定索引beginIndex开始截取直到索引endIndex-1处的字符。
    另外,String还提供了字符串分隔方法,split(“”)方法。例如:
    String sourceStr = “There is a string accessing example.”;
    String[] array = sourceStr.split(" ");
    for(String str:array){
    System.out.printlin(str);
    }

可变字符串

可变字符串在追加、删除、修改、插入和拼接等操作过程中不会产生新的对象。java提供了两个不可变字符串类StringBuffer和StringBuilder,中文翻译为“字符串缓冲区”。

  • 获得字符串长度:length()方法。
  • 获得字符串缓冲区容量:capacity()方法。
  • 字符串追加:append()方法。
  • 字符串插入:insert(int offset,String str)方法:在字符串缓冲区中索引为offset的字符位置之前插入str。
  • 字符串删除:delete(int start,int end)方法:从指定索引start开始直到end-1处删除字符。
  • 字符串替换:replace(int start,int end,String str)方法:在字符串缓冲区中用str替换子字符串,子字符串从指定索引start开始直到索引end-1处的字符。