Java学习05-String与StringBuffer

String与StringBuffer

1.1 Sring类

String用于不变字符串的操作

1.1.1创建字符串

字符串的构造方法有如下4个:

  1. public String():初始化一个新创建的 String 对象,使其表示一个空字符序列。注意,由于 String 是不可变的,所以无需使用此构造方法。
  2. public String(String original):初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列
  3. public String(char[] value):用已有字符数组初始化新的String
  4. public String(StringBuffer buffer):用StringBuffer对象的内容初始化新的String
String s1 = "abc";//创建字符串s1
String s = new String("abc");//创建字符串s
char[] arr = {'a','r','r'};
String s = new String (arr);//将字符数组转为字符串

字符串对象的toCharArray()方法可得到字符串对应的字符数组

public class Ex01 {
    public static void main(String[] args) {
        String s = "hello world!";
        char[] arr;

        arr = s.toCharArray();
        for (int n=0;n<arr.length;n++){
            System.out.print("arr["+n+"]:"+arr[n]+"\t");
        }
    }

【运行结果】
在这里插入图片描述

1.1.2字符串的连接

1.利用“+”运算符实现字符串的拼接

String s = "Hello!";
s = s + "Mary"+4;
System.out.println(s);  //Hello!Mary4
s = 1 + 2 +"hello";
System.out.println(s);  //3hello

[说明]
String类的引用变量只代表对字符串的一个引用,更改s的值实际上只是将其指向另外一个字符串对象。字符串拼接后将创建另一个串对象,而变量s指向这个新的串对象。

2.利用concat()方法实现字符串的拼接

String s = "4+3=";
s = s.concat("7");
System.out.println(s);  //4+3=7

1.1.3比较两个字符串

方法 功能
boolean equals(Object Obj) 相等返回true,否则返回false
boolean equalsIgnoreCase(String Str) 忽略字母大小写判断两个串是否相等
int compareTo(String anotherString) 按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。前串大,返回值>0; 前串小,返回值<0; 两串相等,返回值=0

**【注意】**对比以下程序

String s1 = "HelloWorld";
String s2 = "HelloWorld";
boolean b1 = s1.equals(s2);//true
boolean b2 = (s1==s2);//true
String s1 = "HelloWorld";
String s2 = new String("HelloWorld");
boolean b1 = s1.equals(s2);//true
boolean b2 = (s1==s2);//false

【说明】

  • String中的equals()方法并不是Object中的方法,String中的equals()方法是经过重写了的,它是用来比较两个字符串的值是否相同,而不是比较地址。
  • 为何第一个代码的b2是true而第二个代码的b2为false:Java在编译时在对待字符串常量的存储时有一个优化处理策略,相同字符串常量只存储一份,也就是说第一个代码中的s1和s2指向的是同一个字符串;而第二个程序因为new String,所以s2是新开辟了一块空间用来存储HelloWorld。所以在==比较它们的地址时,第一个代码为true,第二个代码为false。

1.1.4字符串的提取与替换

  • char charAt(int index) : 返回指定索引处的 char 值。
  • String substring(int beginIndex, int endIndex) : 返回从beginIndex开始到endIndex-1结束的一个新字符串,它是此字符串的一个子字符串。
  • String substring(int beginIndex):返回从beginIndex位置开始到串末尾的子字符串。
  • String replace(char oldChar, char newChar) :将字符串中所有oldChar字符换为newChar。
  • String replaceAll(String regex, String replacement):使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
  • String trim() :返回字符串的副本,忽略前导空格和尾部空格。
  • String toUpperCase() :将 String 中的所有字符都转换为大写。
  • String toLowerCase() :将 String 中的所有字符都转换为小写。

1.1.5字符串中字符或子串的查找

方法 功能
int indexOf(int ch) ch的首次出现位置
int indexOf(int ch, int start) ch的首次出现位置>=start
int indexOf(String str) str的首次出现位置
int indexOf(String str, int start) str的首次出现位置>=start
int lastIndexOf(int ch) ch的最后出现位置
int lastIndexOf(int ch, int start) ch的最后出现位置<=start
int lastIndexOf(String str) str的最后出现位置
int lastIndexOf(String str, int start ) str的最后出现位置<=start
boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始
boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束

1.2 StringBuffer类

String类不能改变串对象中的内容,只能通过建立一个新串来实现串的变化,而创建对象过多不仅浪费内存,而且效率也低。要动态改变字符串,通常用StringBuffer类,StringBuffer类可实现字符串内容的添加、修改和删除。

1.2.1创建StringBuffer对象

StringBuffer类的构造方法:

  • public StringBuffer():创建一个空的StringBuffer对象,其初始容量为 16 个字符。
  • public StringBuffer(int capacity):创建一个长度为length的StringBuffer对象。
  • public StringBuffer(String str):用字符串str初始化新建的StringBuffer对象。
StringBuffer sb = new StringBuffer();//无参构造方法创建一个可容纳16个字符的StringBuffer对象
StringBuffer sb2 = new StringBuffer(101); //创建一个可容纳101个字符的字符串
StringBuffer sb = new StringBuffer("abcde");// 以String对象作为参数的构造方法:可容纳长度为参数字符串长度,再加16 个字符

【注意】StringBuffer创建对象时只能new,不能直接创建。

1.2.3 StringBuffer类的主要方法

  • StringBuffer append(Object obj) :将某个对象的串描述添加到StringBuffer尾部
  • StringBuffer insert(int position, Object obj) :将 Object 参数的字符串表示形式插入此字符序列的指定位置中
  • StringBuffer insert(int index, char[] str, int offset, int len) :将字符数组str从offset位置开始的len个字符插入到串的index位置。
  • void setCharAt(int index, char ch) :用新字符替换指定位置字符。
  • int codePointAt(int index) :删除指定位置的字符。
  • StringBuffer replace(int start, int end, String str) :使用给定 String 中的字符替换此序列的子字符串中的字符。
  • String substring(int start, int end) :返回一个新的 String,它包含此序列当前所包含的字符子序列。
  • int length() :返回长度(字符数)。

【例】

StringBuffer sb = new StringBuffer();
sb.append("Hello,java!");
sb.insert(6,30);
System.out.println(sb.toString());//Hello,30java!

练习:将一个字符串反转

1.用StringBuffer

public class Ex01 {
    public static void main(String[] args) {
       String s = "Hello,java!";
       int len = s.length();
       StringBuffer sb = new StringBuffer(len);//创建一个长度为len的字符串

        for (int i = (len-1);i>=0;i--){
            sb.append(s.charAt(i));//返回指定索引处的 char 值
        }
        System.out.println(sb.toString());
    }

【运行结果】在这里插入图片描述
2.用String

public class Ex01 {
    public static void main(String[] args) {
        String s = "Hello,java!";
        String res = "";

        for (int n = s.length()-1; n >= 0; n--) {
            res =res+s.charAt(n);
        }
        System.out.println(res);
    }
}

【注意】用String时,每个创建的字符串对象均要占用内存空间,为java的垃圾回收也带来负担,从效率上来将比用StringBuffer类的拼接方法要差。

猜你喜欢

转载自blog.csdn.net/qq_42145862/article/details/88937375