【Mark学 Java】字符串

String类代表字符串,Java程序中所有字符串字面值(“abc”)都作为此类的实例实现.

字符串特点

  • 字符串的内容永不可变
  • 因为字符串不可改变,所以字符串可以共享使用
  • 字符串效果上相当于char[ ]字符数组,底层是bytes[ ]字节数组.

创建字符串的方式
public String()创建一个空白字符串"",不含有任何内容
public String(char[] array)根据字符数组内容,来创建对应的字符串
public String(bytes[] arrar)根据字节数组内容,来创建对应的字符串
直接创建String str=“A”;直接写上双引号,就是字符串对象

字符串常量池程序当中直接写上的双引号字符串,就在字符串常量池

String str1="abc";
String str2="abc";
char[] str3={'a','b','c'};
String str3=new String(char);//new出的字符串不在常量池
System.out.println(str1==str2);//true
System.out.println(str1==str3);//false
System.out.println(str2==str3);//false

==
基本类型 进行数值的比较
引用类型进行地址值的比较
在这里插入图片描述

常用方法

public boolean equals(Object obj)只有参数是一个字符串并且内容相同才返回true 推荐"abc".equals(str)写法
public boolean equalsIgnoreCase(String str)忽略大小写,进行内容比较

String str=null;
System.out.println("abc".equals(str));//false
System.out.println(str.equals("abc"));//报错,空指针异常NullPointerException

public int length()获取字符串当中含有的字符个数
public String concat(String str)将当前字符串和参数字符串拼接成为新字符串
public char charAt(int index)获取指定索引位置的单个字符(索引从0开始)
public int indexOf(String str)查找参数字符串在本字符串中首次出现的索引位置,如果没有返回-1

字符串截取方法

public String subString(int index)截取从参数位置一直到字符串末尾,返回新的字符串
public String substring(int begin,int end)截取从begin开始,一直到end结束,中间的字符串左闭右开

字符串转换

public char[] toCharArray()将当前字符串拆分为字符数组作为返回值
public byte[] getBytes()获得当前字符串底层的字节数组
public String replace(CharSequence oldone,CharSequence newone)将老字符串替换为新字符串

字符串分割方法

public String[] split(String regex)按照参数的规则,将字符串分割为若干部分
参数实质为正则表达式,按 . 切分时,"\\."

练习

需求 定义一个方法,把数组{1,2,3}按照格式拼接成字符串,格式如下[word1#word2#word3]

    public static void main(String[] args) {
        int[] array={1,2,3};
        String str="【";
        for (int i = 0; i < array.length; i++) {
            if (i==array.length-1){
                str+="word"+array[i]+"】";
            }else {
                str+="word"+array[i]+"#";
            }
        }
        System.out.println(str);
    }

StringBuilder类

字符串底层是常量,创建之后不能改变,底层是一个被final修饰的数组,不能改变,是一个常量
private final byte[] value
进行字符串相加,内存中会有多个字符串,占用空间多,效率低下
在这里插入图片描述
字符串缓冲区可以提高字符串的操作效率(看做一个长度可以变换的字符串),底层也是一个数组,但是没有被final修饰,可以改变长度
byte[] value=new byte[16];
StringBuilder在内存中始终是一个数组,占用内存少,效率高,如果超出了StringBuilder的容量,会自动扩容.
在这里插入图片描述
StringBulider常用方法
StringBuilder()创建一个空的字符串缓冲区对象
StringBuilder(String s);根据传入的内容创建一个字符串缓冲区对象
public StringBuilder append()添加任意类型的字符串形式,并返回当前对象本身.参数可以为任意的数据类型

//创建StringBuilder对象
StringBuilder bu1=new StringBuilder();
//使用append方法往StringBuilder中添加数据
StringBuilder bu2=bu1.append("abc");

注意bu1与bu2为同一个对象,使用append方法无需返回值

//Stringbuilder类
public StringBuilder append(String str){
      super.append(str); 
      return this;   
}

public String toString()将当前StringBuilder对象转换为String对象

StringBuilder reverse()反转内容

StringBuffer区别

StringBuffer在方法前加了一个synchronized修饰,起到同步的作用,可以在多线程环境使用,为此付出的代价就是降低了执行效率。因此,如果在多线程环境可以使用StringBuffer进行字符串连接操作,单线程环境使用StringBuilder,它的效率更高

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值