【Java 基础】String 和 StringBuilder

String 和 StringBuilder

String 类代表字符串,Java程序中的所有字符串文字(例如"abc")都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。String 类在 java.lang 包下,所以使用的时候不需要导包。

String 类

创建字符串

String 类的特点:

  • String 类是不可改变的,所以一旦创建了 String 对象,那它的值就无法改变,如果需要改变请选择使用StringBuffer & StringBuilder 类

  • 虽然 String 的值是不可变的,但是它们可以被共享。

  • 字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )。

创建字符串对象的两种方式:

  • 直接赋值创建,以""方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一 个 String 对象,并在字符串池中维护。
  • 通过构造方法创建,通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同。

直接赋值创建:

host:
  mall:
   admin: http://localhost:8080
@Value("${host.mall.admin}")
private String HOST_MALL_ADMIN;
String url = HOST_MALL_ADMIN + "/brand/create";

构造方法创建:

char[] nameArr = { 'w', 'a', 'n', 'g', 'x', 'i', 'o', 'n', 'g'};
String nameString = new String(nameArr);  


String lock = "LOCK_PREFIX" + "wangxiong";
byte[] value = lock.getBytes(); 
long expireTime = Long.parseLong(new String(value));

常用的构造方法:

方法名 说明
public String() 创建一个空白字符串对象,不含有任何内容
public String(char[] chs) 根据字符数组的内容,来创建字符串对象
public String(byte[] bys) 根据字节数组的内容,来创建字符串对象
String s = "abc"; 直接赋值的方式创建字符串对象,内容就是abc

示例代码:

public class StringDemo01 {
        public static void main(String[] args) {
          // public String():创建一个空白字符串对象,不含有任何内容
      String s1 = new String();
        System.out.println("s1:" + s1); // s1:

      // public String(char[] chs):根据字符数组的内容,来创建字符串对象 
      char[] chs = {'a', 'b', 'c'};
      String s2 = new String(chs);
      System.out.println("s2:" + s2); // s2:abc

      //public String(byte[] bys):根据字节数组的内容,来创建字符串对象 
      byte[] bys = {97, 98, 99};
      String s3 = new String(bys);
      System.out.println("s3:" + s3); // s3:abc

      //String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc 
      String s4 = "abc";
      System.out.println("s4:" + s4); // s4:abc
        } 
}

字符串比较

  • 使用==号,当比较基本数据类型时比较的是具体的值,当比较引用数据类型时,比较的是对象地址值。
  • 使用equals方法,比较两个字符串内容是否相同、区分大小写。

示例代码:

public class StringDemo02 {
    public static void main(String[] args) {
        // 构造方法的方式得到对象
        char[] chs = {'a', 'b', 'c'};
        String s1 = new String(chs);
        String s2 = new String(chs);

        // 直接赋值的方式得到对象
        String s3 = "abc";
        String s4 = "abc";

        // 比较字符串对象地址是否相同
        System.out.println(s1 == s2); // false
        System.out.println(s1 == s3); // false
        System.out.println(s3 == s4); // true
        System.out.println("--------");

        // 比较字符串内容是否相同
        System.out.println(s1.equals(s2)); // true
        System.out.println(s1.equals(s3)); // true
        System.out.println(s3.equals(s4)); // true
    }
}

字符串的内容比较, 用equals() 方法实现。

格式化字符串

String 类的静态方法 format() 能用来创建可复用的格式化字符串。

如下所示:

String captchaKey = String.format("sms:templates:%s:%s:%s", template, mobile, "captcha");

String fs = String.format(
                                 "浮点型变量的值为 " +
                   "%f, 整型变量的值为 " +
                   " %d, 字符串变量的值为 " +
                   " %s", floatVar, intVar, stringVar);

String 常用方法

方法名 说明
public boolean equals(Object anObject) 比较字符串的内容,严格区分大小写(用户名和密码)
public char charAt(int index) 返回指定索引处的 char 值
public int length() 返回此字符串的长度
byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

示例代码:键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)。

public class StringTest03 {
    public static void main(String[] args) {
        // 键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();

        // 要统计三种类型的字符个数,需定义三个统计变量,初始值都为0
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;

        // 遍历字符串,得到每一个字符
        for(int i=0; i<line.length(); i++) {
            char ch = line.charAt(i);

            // 判断该字符属于哪种类型,然后对应类型的统计变量+1
            if(ch>='A' && ch<='Z') {
                bigCount++;
            } else if(ch>='a' && ch<='z') {
                smallCount++;
            } else if(ch>='0' && ch<='9') {
                numberCount++;
            }
        }

        // 输出三种类型的字符个数
        System.out.println("大写字母:" + bigCount + "个");
        System.out.println("小写字母:" + smallCount + "个");
        System.out.println("数字:" + numberCount + "个");

    }
}

示例:定义一个方法,实现字符串反转。

public static String reverse(String s) {
        String ss = "";
        for(int i=s.length()-1; i>=0; i--) {
            ss += s.charAt(i);
        }
        return ss;
    }

StringBuilder 类

当对字符串进行修改的时候,需要使用 StringBufferStringBuilder 类。和 String 类不同的是,StringBufferStringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

常用方法

方法名 说明
public StringBuilder() 创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str) 根据字符串的内容,来创建可变字符串对象
public int length() 返回长度,实际存储值
public String toString() 通过toString()就可以实现StringBuilde转换为String

示例代码:

public class StringBuilderDemo01 {
    public static void main(String[] args) {
        // public StringBuilder():创建一个空白可变字符串对象,不含有任何内容
        StringBuilder sb = new StringBuilder();
        System.out.println("sb:" + sb); // sb:
        System.out.println("sb.length():" + sb.length()); // sb.length():0

        // public StringBuilder(String str):根据字符串的内容,来创建可变字符串对象
        StringBuilder sb2 = new StringBuilder("hello");
        System.out.println("sb2:" + sb2); // sb2:hello
        System.out.println("sb2.length():" + sb2.length()); // sb2.length():5
    }
}

添加和反转

方法名 说明
public StringBuilder append(任意类型) 添加数据,并返回对象本身
public StringBuilder reverse() 返回相反的字符序列

示例代码:

public class StringBuilderDemo01 {
    public static void main(String[] args) {
        // 创建对象
        StringBuilder sb = new StringBuilder();
        sb.append("hello").append("world").append("java").append(100); 
        System.out.println("sb:" + sb); // sb:helloworldjava100
        // 返回相反的字符序列
        sb.reverse();
        System.out.println("sb:" + sb); // sb:001avajdlrowolleh
    }
}

互相转换

  • StringBuilder转换为String:通过 toString()就可以实现把 StringBuilder 转换为 String

  • String转换为StringBuilder:通过构造方法就可以实现把 String 转换为 StringBuilder

StringBuilder 转换为 String 示例:

StringBuilder sb = new StringBuilder();
sb.append("hello");
// String s = sb; //这个是错误的做法
String s = sb.toString();

String转换为StringBuilder 示例:

String s = "hello";
// StringBuilder sb = s; //这个是错误的做法
StringBuilder sb = new StringBuilder(s);

StringBuilder实现字符串的反转,并把结果转成String返回:

// String --- StringBuilder --- reverse() --- String
StringBuilder(String s).reverse().toString();

相关推荐

微信扫一扫,分享到朋友圈

【Java 基础】String 和 StringBuilder
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close