Java基础:String类

相关阅读

  1. Java基础:String类
  2. Java字符串格式化
  3. Java基础:正则表达式

1. 概述

字符串是由多个字符组成的一串数据(字符序列),字符串可以看成是字符数组。

在实际开发中,字符串的操作是最常见的操作,没有之一。而Java没有内置的字符串类型,所以,就在Java类库中提供了一个类String 供我们来使用。String 类代表字符串。

2. String类的特点

  • 字符串是常量,它的值在创建之后不能更改
  • Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
  • 字符串如果是变量相加,先开空间,在拼接。
  • 字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。
package cn.itcast_02;  
/* 
 * 字符串的特点:一旦被赋值,就不能改变。 
 */  
public class StringDemo {  
    public static void main(String[] args) {  
        String s = "hello";  
        s += "world";  
        System.out.println("s:" + s); // helloworld  
    }  
}  

字符串在内存中1

字符串在内存中

字符串在内存中2

字符串在内存中

3. 常见操作方法

3.1 构造方法

方法 说明
String() 创建一个内容为空的字符串
String(byte[]) 根据指定的字节数组创建对象
String(byte[],int,int) 根据字节数组的一部分创建对象
String(char[]) 根据指定的字符数组创建对象
String(char[],int,int) 根据字符数组的一部分创建对象
String(String) 根据指定的字符串内容创建对象


package cn.itcast_01;  
/* 
 * 字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。 
 * 通过查看API,我们可以知道 
 *      A:字符串字面值"abc"也可以看成是一个字符串对象。 
 *      B:字符串是常量,一旦被赋值,就不能被改变。 
 *  
 * 构造方法: 
 *      public String():空构造 
 *      public String(byte[] bytes):把字节数组转成字符串 
 *      public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串 
 *      public String(char[] value):把字符数组转成字符串 
 *      public String(char[] value,int index,int count):把字符数组的一部分转成字符串 
 *      public String(String original):把字符串常量值转成字符串 
 * 
 * 字符串的方法: 
 *      public int length():返回此字符串的长度。 
 */  
public class StringDemo {  
    public static void main(String[] args) {  
        // public String():空构造  
        String s1 = new String();  
        System.out.println("s1:" + s1);  
        System.out.println("s1.length():" + s1.length());  
        System.out.println("--------------------------");  
  
        // public String(byte[] bytes):把字节数组转成字符串  
        byte[] bys = { 97, 98, 99, 100, 101 };  
        String s2 = new String(bys);  
        System.out.println("s2:" + s2);  
        System.out.println("s2.length():" + s2.length());  
        System.out.println("--------------------------");  
  
        // public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串  
        // 我想得到字符串"bcd"  
        String s3 = new String(bys, 1, 3);  
        System.out.println("s3:" + s3);  
        System.out.println("s3.length():" + s3.length());  
        System.out.println("--------------------------");  
  
        // public String(char[] value):把字符数组转成字符串  
        char[] chs = { 'a', 'b', 'c', 'd', 'e', '爱', '林', '亲' };  
        String s4 = new String(chs);  
        System.out.println("s4:" + s4);  
        System.out.println("s4.length():" + s4.length());  
        System.out.println("--------------------------");  
  
        // public String(char[] value,int index,int count):把字符数组的一部分转成字符串  
        String s5 = new String(chs, 2, 4);  
        System.out.println("s5:" + s5);  
        System.out.println("s5.length():" + s5.length());  
        System.out.println("--------------------------");  
          
        //public String(String original):把字符串常量值转成字符串  
        String s6 = new String("abcde");  
        System.out.println("s6:" + s6);  
        System.out.println("s6.length():" + s6.length());  
        System.out.println("--------------------------");  
          
        //字符串字面值"abc"也可以看成是一个字符串对象。  
        String s7 = "abcde";  
        System.out.println("s7:"+s7);  
        System.out.println("s7.length():"+s7.length());  
    }  
}  

运行结果:

String字符串

3.2 判断功能

方法 说明
equals() 比较字符串的内容是否相等,区分大小写
equalsIgnoreCase() 比较字符串的内容是否相等,忽略大小写
contains(String str) 判断大字符串中是否包含小字符串
startsWith() 判断字符串是否以某个字符串开头
endsWith() 判断字符串是否以某个字符串结尾
isEmpty() 判断字符串是否为空


package cn.itcast_03;  
/* 
 * String类的判断功能: 
 * boolean equals(Object obj):比较字符串的内容是否相同,区分大小写 
 * boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写 
 * boolean contains(String str):判断大字符串中是否包含小字符串 
 * boolean startsWith(String str):判断字符串是否以某个指定的字符串开头 
 * boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾 
 * boolean isEmpty():判断字符串是否为空。 
 *  
 * 注意: 
 *      字符串内容为空和字符串对象为空。 
 *      String s = ""; 
 *      String s = null; 
 */  
public class StringDemo {  
    public static void main(String[] args) {  
        // 创建字符串对象  
        String s1 = "helloworld";  
        String s2 = "helloworld";  
        String s3 = "HelloWorld";  
  
        // boolean equals(Object obj):比较字符串的内容是否相同,区分大小写  
        System.out.println("equals:" + s1.equals(s2));  
        System.out.println("equals:" + s1.equals(s3));  
        System.out.println("-----------------------");  
  
        // boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写  
        System.out.println("equals:" + s1.equalsIgnoreCase(s2));  
        System.out.println("equals:" + s1.equalsIgnoreCase(s3));  
        System.out.println("-----------------------");  
  
        // boolean contains(String str):判断大字符串中是否包含小字符串  
        System.out.println("contains:" + s1.contains("hello"));  
        System.out.println("contains:" + s1.contains("hw"));  
        System.out.println("-----------------------");  
  
        // boolean startsWith(String str):判断字符串是否以某个指定的字符串开头  
        System.out.println("startsWith:" + s1.startsWith("h"));  
        System.out.println("startsWith:" + s1.startsWith("hello"));  
        System.out.println("startsWith:" + s1.startsWith("world"));  
        System.out.println("-----------------------");  
  
        // 练习:boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾这个自己玩  
  
        // boolean isEmpty():判断字符串是否为空。  
        System.out.println("isEmpty:" + s1.isEmpty());  
  
        String s4 = "";  
        String s5 = null;  
        System.out.println("isEmpty:" + s4.isEmpty());  
        // NullPointerException  
        // s5对象都不存在,所以不能调用方法,空指针异常  
        System.out.println("isEmpty:" + s5.isEmpty());  
    }  
}  

运行结果:

String字符串

3.3 获取功能

方法 说明
length() 获取字符串长度
charAt(int index) 获取指定位置的字符
indexOf(int ch) 字符第一次出现的索引
indexOf(String str) 字符串第一次出现的索引
indexOf(int ch,int fromIndex) 字符从指定位置后第一次出现的索引
indexOf(String str,int from) 字符串从指定位置后第一次出现的索引
lastIndexOf() 字符串最后一次出现的索引
subString(int start) 从指定位置开始截取字符串
subString(int start,int end) 截取字符串,包左不包右


package cn.itcast_04;   
/* 
 * String类的获取功能 
 * int length():获取字符串的长度。 
 * char charAt(int index):获取指定索引位置的字符 
 * int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。 
 *      为什么这里是int类型,而不是char类型? 
 *      原因是:'a'和97其实都可以代表'a' 
 * int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。 
 * int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。 
 * int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。 
 * String substring(int start):从指定位置开始截取字符串,默认到末尾。 
 * String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。 
 */  
public class StringDemo {  
    public static void main(String[] args) {  
        // 定义一个字符串对象  
        String s = "helloworld";  
  
        // int length():获取字符串的长度。  
        System.out.println("s.length:" + s.length());  
        System.out.println("----------------------");  
  
        // char charAt(int index):获取指定索引位置的字符  
        System.out.println("charAt:" + s.charAt(7));  
        System.out.println("----------------------");  
  
        // int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。  
        System.out.println("indexOf:" + s.indexOf('l'));  
        System.out.println("----------------------");  
  
        // int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。  
        System.out.println("indexOf:" + s.indexOf("owo"));  
        System.out.println("----------------------");  
  
        // int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。  
        System.out.println("indexOf:" + s.indexOf('l', 4));  
        System.out.println("indexOf:" + s.indexOf('k', 4)); // -1  
        System.out.println("indexOf:" + s.indexOf('l', 40)); // -1  
        System.out.println("----------------------");  
  
        // 自己练习:int indexOf(String str,int  
        // fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。  
  
        // String substring(int start):从指定位置开始截取字符串,默认到末尾。包含start这个索引  
        System.out.println("substring:" + s.substring(5));  
        System.out.println("substring:" + s.substring(0));  
        System.out.println("----------------------");  
  
        // String substring(int start,int  
        // end):从指定位置开始到指定位置结束截取字符串。包括start索引但是不包end索引  
        System.out.println("substring:" + s.substring(3, 8));  
        System.out.println("substring:" + s.substring(0, s.length()));  
    }  
}  

运行结果:

String字符串

3.4 转换功能

方法 说明
getBytes() 把字符串转成字节数组
getCharArray() 把字符串转成字符数组
valueOf(char[] chs) 把字符数组转成字符串
valueOf(int i) 把int类型的数据转成字符串
toLowerCase() 把字符串转成小写
toUpperCase() 把字符串转成大写
concat(String str) 字符串拼接


package cn.itcast_05;  
/* 
 * String的转换功能: 
 * byte[] getBytes():把字符串转换为字节数组。 
 * char[] toCharArray():把字符串转换为字符数组。 
 * static String valueOf(char[] chs):把字符数组转成字符串。 
 * static String valueOf(int i):把int类型的数据转成字符串。 
 *      注意:String类的valueOf方法可以把任意类型的数据转成字符串。 
 * String toLowerCase():把字符串转成小写。 
 * String toUpperCase():把字符串转成大写。 
 * String concat(String str):把字符串拼接。 
 */  
public class StringDemo {  
    public static void main(String[] args) {  
        // 定义一个字符串对象  
        String s = "JavaSE";  
  
        // byte[] getBytes():把字符串转换为字节数组。  
        byte[] bys = s.getBytes();  
        for (int x = 0; x < bys.length; x++) {  
            System.out.println(bys[x]);  
        }  
        System.out.println("----------------");  
  
        // char[] toCharArray():把字符串转换为字符数组。  
        char[] chs = s.toCharArray();  
        for (int x = 0; x < chs.length; x++) {  
            System.out.println(chs[x]);  
        }  
        System.out.println("----------------");  
  
        // static String valueOf(char[] chs):把字符数组转成字符串。  
        String ss = String.valueOf(chs);  
        System.out.println(ss);  
        System.out.println("----------------");  
  
        // static String valueOf(int i):把int类型的数据转成字符串。  
        int i = 100;  
        String sss = String.valueOf(i);  
        System.out.println(sss);  
        System.out.println("----------------");  
  
        // String toLowerCase():把字符串转成小写。  
        System.out.println("toLowerCase:" + s.toLowerCase());  
        System.out.println("s:" + s);  
        // System.out.println("----------------");  
        // String toUpperCase():把字符串转成大写。  
        System.out.println("toUpperCase:" + s.toUpperCase());  
        System.out.println("----------------");  
  
        // String concat(String str):把字符串拼接。  
        String s1 = "hello";  
        String s2 = "world";  
        String s3 = s1 + s2;  
        String s4 = s1.concat(s2);  
        System.out.println("s3:"+s3);  
        System.out.println("s4:"+s4);  
    }  
}  

运行结果:

String字符串

3.5 其他功能

方法 说明
replace(char old,char new) 替换字符
replace(String old,String new) 替换字符串
trim() 去掉字符串两端空格
compareTo() 按字典顺序比较字符串
compareToIngnoreCase() 按字典顺序比较字符串,忽略大小写
format() 格式化字符串


String.format(Locale.CHINA,"第%03d条数据%s",10,"str")

更多关于字符串格式化的内容,请看 Java字符串格式化String.format()的使用

package cn.itcast_06;  
/* 
 * String类的其他功能: 
 *  
 * 替换功能: 
 * String replace(char old,char new) 
 * String replace(String old,String new) 
 * 
 * 去除字符串两空格  
 * String trim() 
 *  
 * 按字典顺序比较两个字符串   
 * int compareTo(String str) 
 * int compareToIgnoreCase(String str) 
 */  
public class StringDemo {  
    public static void main(String[] args) {  
        // 替换功能  
        String s1 = "helloworld";  
        String s2 = s1.replace('l', 'k');  
        String s3 = s1.replace("owo", "ak47");  
        System.out.println("s1:" + s1);  
        System.out.println("s2:" + s2);  
        System.out.println("s3:" + s3);  
        System.out.println("---------------");  
  
        // 去除字符串两空格  
        String s4 = " hello world  ";  
        String s5 = s4.trim();  
        System.out.println("s4:" + s4 + "---");  
        System.out.println("s5:" + s5 + "---");  
  
        // 按字典顺序比较两个字符串  
        String s6 = "hello";  
        String s7 = "hello";  
        String s8 = "abc";  
        String s9 = "xyz";  
        System.out.println(s6.compareTo(s7));// 0  
        System.out.println(s6.compareTo(s8));// 7  
        System.out.println(s6.compareTo(s9));// -16  
    }  
}  

运行结果:

String字符串

4. String类练习

4.1 把数组中的数据按照指定个格式拼接成一个字符串

package cn.itcast_07;  
/* 
 * 需求:把数组中的数据按照指定个格式拼接成一个字符串 
 * 举例: 
 *      int[] arr = {1,2,3};     
 * 输出结果: 
 *      "[1, 2, 3]" 
 * 分析: 
 *      A:定义一个字符串对象,只不过内容为空 
 *      B:先把字符串拼接一个"[" 
 *      C:遍历int数组,得到每一个元素 
 *      D:先判断该元素是否为最后一个 
 *          是:就直接拼接元素和"]" 
 *          不是:就拼接元素和逗号以及空格 
 *      E:输出拼接后的字符串 
 *  
 * 把代码用功能实现。 
 */  
public class StringTest2 {  
    public static void main(String[] args) {  
        // 前提是数组已经存在  
        int[] arr = { 1, 2, 3 };  
  
        // 写一个功能,实现结果  
        String result = arrayToString(arr);  
        System.out.println("最终结果是:" + result);  
    }  
  
    /* 
     * 两个明确: 返回值类型:String 参数列表:int[] arr 
     */  
    public static String arrayToString(int[] arr) {  
        // 定义一个字符串  
        String s = "";  
  
        // 先把字符串拼接一个"["  
        s += "[";  
  
        // 遍历int数组,得到每一个元素  
        for (int x = 0; x < arr.length; x++) {  
            // 先判断该元素是否为最后一个  
            if (x == arr.length - 1) {  
                // 就直接拼接元素和"]"  
                s += arr[x];  
                s += "]";  
            } else {  
                // 就拼接元素和逗号以及空格  
                s += arr[x];  
                s += ", ";  
            }  
        }  
  
        return s;  
    }  
}  

4.2 字符串反转

package cn.itcast_07;  
  
import java.util.Scanner;  
  
/* 
 * 字符串反转 
 * 举例:键盘录入”abc”      
 * 输出结果:”cba” 
 *  
 * 分析: 
 *      A:键盘录入一个字符串 
 *      B:定义一个新字符串 
 *      C:倒着遍历字符串,得到每一个字符 
 *          a:length()和charAt()结合 
 *          b:把字符串转成字符数组 
 *      D:用新字符串把每一个字符拼接起来 
 *      E:输出新串 
 */  
public class StringTest3 {  
    public static void main(String[] args) {  
        // 键盘录入一个字符串  
        Scanner sc = new Scanner(System.in);  
        System.out.println("请输入一个字符串:");  
        String line = sc.nextLine();  
  
        /* 
        // 定义一个新字符串 
        String result = ""; 
 
        // 把字符串转成字符数组 
        char[] chs = line.toCharArray(); 
 
        // 倒着遍历字符串,得到每一个字符 
        for (int x = chs.length - 1; x >= 0; x--) { 
            // 用新字符串把每一个字符拼接起来 
            result += chs[x]; 
        } 
 
        // 输出新串 
        System.out.println("反转后的结果是:" + result); 
        */  
  
        // 改进为功能实现  
        String s = myReverse(line);  
        System.out.println("实现功能后的结果是:" + s);  
    }  
  
    /* 
     * 两个明确: 返回值类型:String 参数列表:String 
     */  
    public static String myReverse(String s) {  
        // 定义一个新字符串  
        String result = "";  
  
        // 把字符串转成字符数组  
        char[] chs = s.toCharArray();  
  
        // 倒着遍历字符串,得到每一个字符  
        for (int x = chs.length - 1; x >= 0; x--) {  
            // 用新字符串把每一个字符拼接起来  
            result += chs[x];  
        }  
        return result;  
    }  
}  

4.3 统计大串中小串出现的次数

package cn.itcast_07;  
  
/* 
 * 统计大串中小串出现的次数 
 * 举例: 
 *      在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun" 
 * 结果: 
 *      java出现了5次 
 *  
 * 分析: 
 *      前提:是已经知道了大串和小串。 
 *  
 *      A:定义一个统计变量,初始化值是0 
 *      B:先在大串中查找一次小串第一次出现的位置 
 *          a:索引是-1,说明不存在了,就返回统计变量 
 *          b:索引不是-1,说明存在,统计变量++ 
 *      C:把刚才的索引+小串的长度作为开始位置截取上一次的大串,返回一个新的字符串,并把该字符串的值重新赋值给大串 
 *      D:回到B 
 */  
public class StringTest5 {  
    public static void main(String[] args) {  
        // 定义大串  
        String maxString = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";  
        // 定义小串  
        String minString = "java";  
  
        // 写功能实现  
        int count = getCount(maxString, minString);  
        System.out.println("Java在大串中出现了:" + count + "次");  
    }  
  
    /* 
     * 两个明确: 返回值类型:int 参数列表:两个字符串 
     */  
    public static int getCount(String maxString, String minString) {  
        // 定义一个统计变量,初始化值是0  
        int count = 0;  
  
        /* 
        // 先在大串中查找一次小串第一次出现的位置 
        int index = maxString.indexOf(minString); 
        // 索引不是-1,说明存在,统计变量++ 
        while (index != -1) { 
            count++; 
            // 把刚才的索引+小串的长度作为开始位置截取上一次的大串,返回一个新的字符串,并把该字符串的值重新赋值给大串 
            // int startIndex = index + minString.length(); 
            // maxString = maxString.substring(startIndex); 
            maxString = maxString.substring(index + minString.length()); 
            // 继续查 
            index = maxString.indexOf(minString); 
        } 
        */  
          
        int index;  
        //先查,赋值,判断  
        while((index=maxString.indexOf(minString))!=-1){  
            count++;  
            maxString = maxString.substring(index + minString.length());  
        }  
  
        return count;  
    }  
}  

5. StringBuffer

我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题

  • StringBuffer是线程安全的可变字符序列。
  • StringBuffer和String的区别?

前者长度和内容可变,后者不可变。如果使用前者做字符串的拼接,不会浪费太多的资源。

6. 常见操作方法

String字符串

6.1 构造方法和获取方法

package cn.itcast_01;  
  
/* 
 * StringBuffer: 
 *      线程安全的可变字符串。 
 *  
 * StringBuffer和String的区别? 
 * 前者长度和内容可变,后者不可变。 
 * 如果使用前者做字符串的拼接,不会浪费太多的资源。 
 *  
 * StringBuffer的构造方法: 
 *      public StringBuffer():无参构造方法 
 *      public StringBuffer(int capacity):指定容量的字符串缓冲区对象 
 *      public StringBuffer(String str):指定字符串内容的字符串缓冲区对象 
 * 
 * StringBuffer的获取方法: 
 *      public int capacity():返回当前容量。   理论值 
 *      public int length():返回长度(字符数)。 实际值 
 */  
public class StringBufferDemo {  
    public static void main(String[] args) {  
        // public StringBuffer():无参构造方法  
        StringBuffer sb = new StringBuffer();  
        System.out.println("sb:" + sb);  
        System.out.println("sb.capacity():" + sb.capacity());  
        System.out.println("sb.length():" + sb.length());  
        System.out.println("--------------------------");  
  
        // public StringBuffer(int capacity):指定容量的字符串缓冲区对象  
        StringBuffer sb2 = new StringBuffer(50);  
        System.out.println("sb2:" + sb2);  
        System.out.println("sb2.capacity():" + sb2.capacity());  
        System.out.println("sb2.length():" + sb2.length());  
        System.out.println("--------------------------");  
  
        // public StringBuffer(String str):指定字符串内容的字符串缓冲区对象  
        StringBuffer sb3 = new StringBuffer("hello");  
        System.out.println("sb3:" + sb3);  
        System.out.println("sb3.capacity():" + sb3.capacity());  
        System.out.println("sb3.length():" + sb3.length());  
    }  
}  

6.2 添加功能

package cn.itcast_02;  
  
/* 
 * StringBuffer的添加功能: 
 * public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身 
 *  
 * public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身 
 */  
public class StringBufferDemo {  
    public static void main(String[] args) {  
        // 创建字符串缓冲区对象  
        StringBuffer sb = new StringBuffer();  
  
        // public StringBuffer append(String str)  
        // StringBuffer sb2 = sb.append("hello");  
        // System.out.println("sb:" + sb);  
        // System.out.println("sb2:" + sb2);  
        // System.out.println(sb == sb2); // true  
  
        // 一步一步的添加数据  
        // sb.append("hello");  
        // sb.append(true);  
        // sb.append(12);  
        // sb.append(34.56);  
  
        // 链式编程  
        sb.append("hello").append(true).append(12).append(34.56);  
        System.out.println("sb:" + sb);  
  
        // public StringBuffer insert(int offset,String  
        // str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身  
        sb.insert(5, "world");  
        System.out.println("sb:" + sb);  
    }  
} 

运行结果:

String字符串

6.3 删除功能

package cn.itcast_03;  
  
/* 
 * StringBuffer的删除功能 
 * public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身 
 * public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身 
 */  
public class StringBufferDemo {  
    public static void main(String[] args) {  
        // 创建对象  
        StringBuffer sb = new StringBuffer();  
  
        // 添加功能  
        sb.append("hello").append("world").append("java");  
        System.out.println("sb:" + sb);  
  
        // public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身  
        // 需求:我要删除e这个字符,肿么办?  
        // sb.deleteCharAt(1);  
        // 需求:我要删除第一个l这个字符,肿么办?  
        // sb.deleteCharAt(1);  
  
        // public StringBuffer delete(int start,int  
        // end):删除从指定位置开始指定位置结束的内容,并返回本身  
        // 需求:我要删除world这个字符串,肿么办?  
        // sb.delete(5, 10);  
  
        // 需求:我要删除所有的数据  
        sb.delete(0, sb.length());  
  
        System.out.println("sb:" + sb);  
    }  
}

运行结果:

String字符串

6.4 替换功能

package cn.itcast_04;  
  
/* 
 * StringBuffer的替换功能: 
 * public StringBuffer replace(int start,int end,String str):从start开始到end用str替换 
 */  
public class StringBufferDemo {  
    public static void main(String[] args) {  
        // 创建字符串缓冲区对象  
        StringBuffer sb = new StringBuffer();  
  
        // 添加数据  
        sb.append("hello");  
        sb.append("world");  
        sb.append("java");  
        System.out.println("sb:" + sb);  
  
        // public StringBuffer replace(int start,int end,String  
        // str):从start开始到end用str替换  
        // 需求:我要把world这个数据替换为"节日快乐"  
        sb.replace(5, 10, "节日快乐");  
        System.out.println("sb:" + sb);  
    }  
}

运行结果:

String字符串

6.5 反转功能

package cn.itcast_05;  
  
/* 
 * StringBuffer的反转功能: 
 * public StringBuffer reverse() 
 */  
public class StringBufferDemo {  
    public static void main(String[] args) {  
        // 创建字符串缓冲区对象  
        StringBuffer sb = new StringBuffer();  
  
        // 添加数据  
        sb.append("霞青林爱我");  
        System.out.println("sb:" + sb);  
  
        // public StringBuffer reverse()  
        sb.reverse();  
        System.out.println("sb:" + sb);  
    }  
}

运行结果:

String字符串

6.6 截取功能

package cn.itcast_06;  
  
/* 
 * StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了 
 * public String substring(int start) 
 * public String substring(int start,int end) 
 */  
public class StringBufferDemo {  
    public static void main(String[] args) {  
        // 创建字符串缓冲区对象  
        StringBuffer sb = new StringBuffer();  
  
        // 添加元素  
        sb.append("hello").append("world").append("java");  
        System.out.println("sb:" + sb);  
  
        // 截取功能  
        // public String substring(int start)  
        String s = sb.substring(5);  
        System.out.println("s:" + s);  
        System.out.println("sb:" + sb);  
  
        // public String substring(int start,int end)  
        String ss = sb.substring(5, 10);  
        System.out.println("ss:" + ss);  
        System.out.println("sb:" + sb);  
    }  
}

运行结果:

String字符串

7. StringBuffer类练习

7.1 String和StringBuffer的相互转换

package cn.itcast_07;  
  
/* 
 * 为什么我们要讲解类之间的转换: 
 * A -- B的转换 
 * 我们把A转换为B,其实是为了使用B的功能。 
 * B -- A的转换 
 * 我们可能要的结果是A类型,所以还得转回来。 
 *  
 * String和StringBuffer的相互转换? 
 */  
public class StringBufferTest {  
    public static void main(String[] args) {  
        // String -- StringBuffer  
        String s = "hello";  
        // 注意:不能把字符串的值直接赋值给StringBuffer  
        // StringBuffer sb = "hello";  
        // StringBuffer sb = s;  
        // 方式1:通过构造方法  
        StringBuffer sb = new StringBuffer(s);  
        // 方式2:通过append()方法  
        StringBuffer sb2 = new StringBuffer();  
        sb2.append(s);  
        System.out.println("sb:" + sb);  
        System.out.println("sb2:" + sb2);  
        System.out.println("---------------");  
  
        // StringBuffer -- String  
        StringBuffer buffer = new StringBuffer("java");  
        // String(StringBuffer buffer)  
        // 方式1:通过构造方法  
        String str = new String(buffer);  
        // 方式2:通过toString()方法  
        String str2 = buffer.toString();  
        System.out.println("str:" + str);  
        System.out.println("str2:" + str2);  
    }  
}

运行结果:

String字符串

7.2 把数组拼接成一个字符串

package cn.itcast_07;  
  
/* 
 * 把数组拼接成一个字符串 
 */  
public class StringBufferTest2 {  
    public static void main(String[] args) {  
        // 定义一个数组  
        int[] arr = { 44, 33, 55, 11, 22 };  
  
        // 定义功能  
        // 方式1:用String做拼接的方式  
        String s1 = arrayToString(arr);  
        System.out.println("s1:" + s1);  
  
        // 方式2:用StringBuffer做拼接的方式  
        String s2 = arrayToString2(arr);  
        System.out.println("s2:" + s2);  
    }  
  
    // 用StringBuffer做拼接的方式  
    public static String arrayToString2(int[] arr) {  
        StringBuffer sb = new StringBuffer();  
  
        sb.append("[");  
        for (int x = 0; x < arr.length; x++) {  
            if (x == arr.length - 1) {  
                sb.append(arr[x]);  
            } else {  
                sb.append(arr[x]).append(", ");  
            }  
        }  
        sb.append("]");  
  
        return sb.toString();  
    }  
  
    // 用String做拼接的方式  
    public static String arrayToString(int[] arr) {  
        String s = "";  
  
        s += "[";  
        for (int x = 0; x < arr.length; x++) {  
            if (x == arr.length - 1) {  
                s += arr[x];  
            } else {  
                s += arr[x];  
                s += ", ";  
            }  
        }  
        s += "]";  
  
        return s;  
    }  
}

运行结果:

String字符串

7.3 把字符串反转

package cn.itcast_07;  
  
import java.util.Scanner;  
  
/* 
 * 把字符串反转 
 */  
public class StringBufferTest3 {  
    public static void main(String[] args) {  
        // 键盘录入数据  
        Scanner sc = new Scanner(System.in);  
        System.out.println("请输入数据:");  
        String s = sc.nextLine();  
  
        // 方式1:用String做拼接  
        String s1 = myReverse(s);  
        System.out.println("s1:" + s1);  
        // 方式2:用StringBuffer的reverse()功能  
        String s2 = myReverse2(s);  
        System.out.println("s2:" + s2);  
    }  
  
    // 用StringBuffer的reverse()功能  
    public static String myReverse2(String s) {  
        // StringBuffer sb = new StringBuffer();  
        // sb.append(s);  
  
        // StringBuffer sb = new StringBuffer(s);  
        // sb.reverse();  
        // return sb.toString();  
  
        // 简易版  
        return new StringBuffer(s).reverse().toString();  
    }  
  
    // 用String做拼接  
    public static String myReverse(String s) {  
        String result = "";  
  
        char[] chs = s.toCharArray();  
        for (int x = chs.length - 1; x >= 0; x--) {  
            // char ch = chs[x];  
            // result += ch;  
            result += chs[x];  
        }  
  
        return result;  
    }  
}

运行结果:

String字符串

7.4 判断一个字符串是否是对称字符串

package cn.itcast_07;  
  
import java.util.Scanner;  
  
/* 
 * 判断一个字符串是否是对称字符串 
 * 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串 
 *  
 * 分析: 
 *      判断一个字符串是否是对称的字符串,我只需要把 
 *          第一个和最后一个比较 
 *          第二个和倒数第二个比较 
 *          ... 
 *      比较的次数是长度除以2。 
 */  
public class StringBufferTest4 {  
    public static void main(String[] args) {  
        // 创建键盘录入对象  
        Scanner sc = new Scanner(System.in);  
        System.out.println("请输入一个字符串:");  
        String s = sc.nextLine();  
  
        // 一个一个的比较  
        boolean b = isSame(s);  
        System.out.println("b:" + b);  
          
        //用字符串缓冲区的反转功能  
        boolean b2 = isSame2(s);  
        System.out.println("b2:"+b2);  
    }  
      
    public static boolean isSame2(String s) {  
        return new StringBuffer(s).reverse().toString().equals(s);  
    }  
      
  
    // public static boolean isSame(String s) {  
    // // 把字符串转成字符数组  
    // char[] chs = s.toCharArray();  
    //  
    // for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {  
    // if (chs[start] != chs[end]) {  
    // return false;  
    // }  
    // }  
    //  
    // return true;  
    // }  
  
    public static boolean isSame(String s) {  
        boolean flag = true;  
  
        // 把字符串转成字符数组  
        char[] chs = s.toCharArray();  
  
        for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {  
            if (chs[start] != chs[end]) {  
                flag = false;  
                break;  
            }  
        }  
  
        return flag;  
    }  
}

运行结果:

String字符串
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,581评论 18 399
  • 多个字符组成的一串数据就是字符串. 1字符串的特点: A:字符串一旦被赋值,就不能改变。 注意:这里指的是字...
    王子也寂寞阅读 406评论 0 0
  • 集合框架: 1)特点:存储对象;长度可变;存储对象的类型可不同2)Collection(1)List:有序的;元素...
    Demo_Yang阅读 1,248评论 0 4
  • “地铁隧道里吹来的风,都像是从过去传来的往事,让人一不小心就愣住了,舍不得挪一步,害怕转瞬既逝的风带走了所有回忆。...
    大瓜world阅读 1,712评论 0 4
  • 长时间不了解外面行情,居然都有点落伍了。 今天电话咨询了些苏州和无锡各区域的楼盘情况,让自己不敢相信自己的耳朵...
    言吾姑娘阅读 257评论 0 0