【Java】字符串处理 —— String、StringBuffer 与 StringBuilder ...

打印 上一主题 下一主题

主题 793|帖子 793|积分 2379

由于String类是final类型的,所以使用String定义的字符串是一个常量,因此它一旦创建,其内容和长度是不可改变的。如果须要对一个字符串进行修改,则只能创建新的字符串。为了便于对字符串进行修改,在JDK中提供了一个StringBuffer类(也称字符串缓冲区)来操纵字符串。
String类的初始化

表1 String类的常用构造方法
方法声明
功能描述
String()
创建一个内容为空的字符串
String(String value)
根据指定的字符串内容创建对象
String(char[] value)
根据指定的字符数组创建对象
String类的常见操纵

表1 String类的常用方法
方法声明
功能描述
int indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引
int lastIndexOf(int ch)
返回指定字符在此字符串中最后一次出现处的索引
int indexOf(String str)
返回指定子字符串在此字符串中第一次出现处的索引
int lastIndexOf(String str)
返回指定子字符串在此字符串中最后一次出现处的索引
char charAt(int index)
返回字符串中index位置上的字符,此中index的取值范围是:0~(字符串长度-1)
boolean endsWith(String suffix)
判断此字符串是否以指定的字符串末端
int length()
返回此字符串的长度
boolean equals(Object anObject)
将此字符串与指定的字符串比较
boolean isEmpty()
当且仅当字符串长度为0时返回true
boolean startsWith(String prefix)
判断此字符串是否以指定的字符串开始
boolean contains(CharSequence cs)
判断此字符串中是否包含指定的字符序列
String toLowerCase()
使用默认语言环境的规则将String中的所有字符都转换为小写
String toUpperCase()
使用默认语言环境的规则将String中的所有字符都转换为大写
static String valueOf(int i)
返回 int 参数的字符串表现情势
char[] toCharArray()
将此字符串转换为一个字符数组
String replace(CharSequence oldstr, CharSequence newstr)
返回一个新的字符串,它是通过用newstr更换此字符串中出现的所有oldstr得到的
String[] split(String regex)
根据参数regex(regex是一个正则表达式,用来限定分隔规则)将字符串分割为若干个子字符串
String substring(int beginIndex)
返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到此字符串末尾的所有字符
String substring(int beginIndex, int endIndex)
返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到索引endIndex-1角标处的所有字符
String trim()
返回一个新字符串,它去除了原字符串首尾的空格
1.字符串的基本操纵
  1. public class Example02 {
  2.         public static void main(String[] args) {
  3.             String s = "abcabcbacdba"; // 初始化字符串
  4.             System.out.println("字符串的长度为:" + s.length());
  5.             System.out.println("字符串中第一个字符:" + s.charAt(0));
  6.             System.out.println("字符c第一次出现的位置:" + s.indexOf('c'));
  7.             System.out.println("字符c最后一次出现的位置:" + s.lastIndexOf('c'));
  8.             System.out.println("子字符串第一次出现的位置:" + s.indexOf("ab"));
  9.             System.out.println("子字符串最后一次出现的位置:"
  10.                                                         + s.lastIndexOf("ab"));
  11.          }
  12.     }
复制代码
 2.字符串的转换操纵
  1. public class Example03 {
  2.         public static void main(String[] args) {
  3.             String str = "java";
  4.             char[] charArray = str.toCharArray(); // 字符串转换为字符数组
  5.              System.out.print("将字符串转为字符数组后的遍历结果:");
  6.             for (int i = 0; i < charArray.length; i++) {
  7.                 if (i != charArray.length - 1) {
  8.                     // 如果不是数组的最后一个元素,在元素后面加逗号
  9.                     System.out.print(charArray[i] + ",");
  10.                 } else {
  11.                     // 数组的最后一个元素后面不加逗号
  12.                     System.out.println(charArray[i]);
  13.                 }
  14.             }
  15.             System.out.println("将int值转换为String类型之后的结果:"  
  16.                                     + String.valueOf(12));
  17.             System.out.println("将字符串转换成大写之后的结果:"  
  18.                                     + str.toUpperCase());
  19.         }
  20.     }
复制代码
 3.字符串的更换和去除空格操纵
  1.     public class Example04 {
  2.         public static void main(String[] args) {
  3.             String s = "     http :// localhost : 8080     ";
  4.             // 字符串去除空格操作
  5.             System.out.println("去除字符串两端空格后的结果:" + s.trim());
  6.             // 字符串替换操作
  7.             System.out.println("去除字符串中所有空格后的结果:"
  8.                                   + s.replace(" ", ""));
  9.         }
  10.     }
复制代码
4.字符串的判断操纵
  1.     public class Example05 {
  2.         public static void main(String[] args) {
  3.             String s1 = " Starter"; // 声明一个字符串
  4.             String s2 = "St";
  5.             System.out.println("判断是否以字符串St开头:" + s1.startsWith("St"));
  6.             System.out.println("判断是否以字符串er结尾:" + s1.endsWith("er"));
  7.             System.out.println("判断是否包含字符串ar:" + s1.contains("ar"));
  8.             System.out.println("判断字符串是否为空:" + s1.isEmpty());
  9.             System.out.println("判断两个字符串是否相等" + s1.equals(s2));
  10.         }
  11.     }
复制代码
在程序中可以通过“==”和equals()两种方式对字符串进行比较,但这两种方式有显著的区别。equals()方法用于比较两个字符串中的字符值是否相称,“==”方式用于比较两个字符串对象的内存所在是否相同。
5.字符串的截取和分割 
  1.     public class Example06 {
  2.         public static void main(String[] args) {
  3.             String str = "2018-01-24";
  4.             // 下面是字符串截取操作
  5.             System.out.println("从第6个字符截取到末尾的结果:"
  6.                                    + str.substring(5));
  7.             System.out.println("从第6个字符截取到第7个字符的结果:"
  8.                                    +str.substring(5, 7));
  9.             // 下面是字符串分割操作
  10.             System.out.print("分割后的字符串数组中的元素依次为:");
  11.             // 通过横线连接符“—”将字符串转换为字符串数组
  12.             String[] strArray = str.split("-");
  13.             // 循环输出数组中的元素
  14.             for (int i = 0; i < strArray.length; i++) {
  15.                 if (i != strArray.length - 1) {
  16.                     // 如果不是数组的最后一个元素,在元素后面加顿号
  17.                     System.out.print(strArray[i] + "、");
  18.                 } else {
  19.                     // 数组的最后一个元素后面不加顿号
  20.                     System.out.println(strArray[i]);
  21.                 }
  22.             }
  23.         }
  24.     }
复制代码
 
StringBuffer类

StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。StringBuffer类似一个字符容器,当在此中添加或删除字符时,所操纵的都是这个字符容器,因此并不会产生新的StringBuffer对象。
表1 StringBuffer类常用方法
方法声明
功能描述
StringBuffer append(char c)
添加字符到StringBuffer对象中末尾
StringBuffer insert(int offset,String str)
在StringBuffer对象中的offset位置插入字符串str
StringBuffer deleteCharAt(int index)
移除StringBuffer对象中指定位置的字符
StringBuffer delete(int start,int end)
删除StringBuffer对象中指定范围的字符或字符串
StringBuffer replace(int start,int end,String s)
将StringBuffer对象中指定范围的字符或字符串用新的字符串s进行更换
void setCharAt(int index, char ch)
修改指定位置index处的字符
String toString()
返回StringBuffer缓冲区中的字符串对象
StringBuffer reverse()
将此StringBuffer对象用其反转情势取代

StringBuffer类和String类有许多相似之处,初学者在使用时很轻易肴杂。接下来针对这两个类进行对比,简单归纳一下两者的不同,详细如下:
①String类定义的字符串是常量,一旦创建后,内容和长度都是无法改变的。StringBuffer表现字符容器,其内容和长度可以随时修改。在操纵字符串时,如果该字符串仅用于表现数据类型,则使用String类即可,但是如果须要对字符串中的字符进行增删操纵,则使用StringBuffer类。
②String类重写了Object类的equals()方法,而StringBuffer类没有重写Object类的equals()方法。

StringBuilder的使用
除了使用StringBuffer外,JDK 1.5之后提供了一个StringBuilder类同样可以操纵字符串。StringBuilder与StringBuffer的功能相似,且两个类中所提供的方法也基本相同。二者所不同的是StringBuffer是线程安全的,而StringBuilder没有实现线程安全功能,所以性能略高。通常环境下,如果创建一个内容可变的字符串对象,应该优先考虑StringBuilder类。
StringBuilder类同样提供了一系列的追加(append)、插入(insert)、更换(replace)和删除(delete)的方法。如果将文件1中的StringBuffer换成StringBuilder,程序同样可以准确实行。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表