Java 基础--字符串

字符串

用双引号括起来的多个字符

"Hello World!"
"你好世界"
"\u0048\u0057"
"\n\t"
"a"    // 虽然只有一个字符,但这也是个字符串
""    // 空字符串
  • 空字符串不是 null ,空字符串是分配内存空间,null 是没有分配内存空间
不可变字符串

String

  • 创建字符串

    String strName="str";
    
  • 用构造函数创建字符串

    // 使用空字符串创建并初始化一个新的 String 对象
    String strName=new String();
    
    // 使用另外一个字符串创建并初始化一个新的 String 对象
    String staName = new String(String original);
    
    • String(StringBuffer buffer):使用可变字符串对象(StringBuffer)创建并初始化一个新的 String 对象

    • String(StringBuilder builder):使用可变字符串对象(StringBuilder)创建并初始化一个新的 String 对象

    • String(byte[] bytes):使用平台默认的字符集解码指定的 byte 数组,通过 byte 数组创建并初始化一个新的 String 对象

    • String(char[] value):通过字符数组创建并初始化一个新的 String 对象

    • String(char[] calue, int offset, int count):通过字符数组的子数组创建并初始化一个新的 String 对象

      • offset:子数组第一个字符的索引

      • count:指定子数组的长度

    • 实例

      // 创建字符串对象
      String str1 = new String();
      String str2 = new String("Hello World");
      String str3 = new String("\u0048\u0065\u006c\u006c\u006f");
      System.out.println("str2 = " + str2);
      System.out.println("str3 = " + str3);
      
      char[] chars = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
      // 通过字符数组创建字符串对象
      String str4 = new String(chars);
      // 通过子字符数组创建字符串对象
      String str5 = new String(chars, 1, 4);
      System.out.println("str4 = " + str4);
      System.out.println("str5 = " + str5);
      
      byte[] bytes = { 97, 98, 99 };
      // 通过 byte 数组创建字符串对象
      String str6 = new String(bytes);
      System.out.println("str6 = " + str6);
      System.out.println("str6 的长度:" + str6.length());
      
      str2 = Hello World
      str3 = Hello
      str4 = abcdefg
      str5 = bcde
      str6 = abc
      str6 的长度:3
      
字符串池
String str1 = "Hello";    // 字符串常量
String str2 = "Hello";
String str3 = new String("Hello");    // 使用 new 关键字创建
String str4 = new String("Hello");

System.out.printf("str1 == str2 : %b%n", str1 == str2);
System.out.printf("str3 == str4 : %b%n", str3 == str4);
System.out.printf("str1 == str3 : %b%n", str1 == str3);
System.out.printf("str2 == str3 : %b%n", str2 == str3);
str1 == str2 : true
str3 == str4 : false
str1 == str3 : false
str2 == str3 : false
字符串长度
strName.length();
连接字符串
  • 使用 “ + ” 拼接

    • 优势:可以拼接任何类型的数据成字符串

      str1 + str2;
      
  • 使用 contact(String str) 拼接

    • 是能拼接 String 型数据

      str1.contact(str2);
      
创建格式化字符串

可以使用 printf() 和 format() 方法

  • String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象

  • String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出

  • 使用 printf() 方法

    System.out.printf("浮点型变量的值为 " +
                      "%f, 整型变量的值为 " +
                      " %d, 字符串变量的值为 " +
                      "is %s", floatVar, intVar, stringVar);
    
  • 使用 format() 方法

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

StringBuffer 和 StringBuilder 类

在对字符串进行修改时使用

StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象

  • 在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer

  • StringBulider 和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)

  • 由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类

  • 实例

    public class RunoobTest{
        public static void main(String args[]){
            StringBuilder sb = new StringBuilder(10);
            sb.append("Runoob..");
            System.out.println(sb);  
            sb.append("!");
            System.out.println(sb); 
            sb.insert(8, "Java");
            System.out.println(sb); 
            sb.delete(5,8);
            System.out.println(sb);  
        }
    }
    
    Runoob..
    Runoob..!
    Runoob..Java!
    RunooJava!
    
  • 在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值