String的基础知识

String知识点

String:字符串

1.String:实现了final的,不可以被继承
2.String:实现了Serializable接口,表示字符串是可以序列化的
实现了Comparable接口,表示String是可以比较大小的
3.String:内部定义了 final char[] value 用于存储字符串数据
4.String:代表不可变的字符序列,简称:不可变性

String字符串拼接

1.常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量
2.只要其中一个是变量,结果就在堆中
3.如果拼接的结果调用intern()方法,返回值就在常量池中

String str1 = "HelloWorld";
        String str2 = "Hello";
        String str3 = str2+"World";
        System.out.println(str1==str3);//false
        final String str4 = "Hello";
        String str5 = str4+"World";//常量+常量
        System.out.println(str1==str5);//true
        System.out.println(str1==str5);//true
        String str6 = new String("Hello");
        String str7 = new String("Hello");
        System.out.println(str2==str6);//false
        System.out.println(str6==str7);//false

在这里插入图片描述

测试题

public class StringTest2 {
    String str = new String("good");
    char[] ch  = {'t','e','s','t'};
    public void change(String str,char ch[]){
        str = "test ok";
        ch[0] = 'b';
    }
    public static void main(String[] args) {
        StringTest2 t = new StringTest2();
        t.change(t.str,t.ch);
        System.out.println(t.str+"and");
        System.out.println(t.ch);
    }
}

在这里插入图片描述

String 常用方法

int length():返回字符串长度:return value. length
char charAt(int index):返回某索引处的字符
boolean isEmpty():判断是否是空字符串
String toLowerCase():转换成小写
String toUpperCase():转换成大写
String trim():返回字符串的副本,忽略前后空格
boolean equals(Object obj):比较字符串的内容是否相同
boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
String concat(String str):将制定字符串连接到此字符串 等价于+
int compareTo(String str):比较两个字符串的大小
String substring(int beginIndex):返回一个新的字符串,它是此字符串从beginIndex开始截取
String substring(int beginIndex,int endIndex):返回一个新字符串
boolean endsWith(String suffix):测试辞职字符串是否以指定的后缀结束
boolean startWith(String prefix):测试此字符串是否以制定前缀开始
boolean startsWith(String prefix,int toffset):测试此字符串从指定索引开始的字符串是否以制定的前缀开始
boolean contains(charSequence s):当且晋档此字符串包含制定的char值序列时,返回true
int indexOf(String str):返回制定字符串在此字符串中第一次出现的索引
int indexOf(String str,int fromIndex):返回制定字符串在此字符串中第一次出现处的索引
int lastIndexOf(String str):返回制定字符串在此字符串中最右边出现的索引
int lastIndexOf(String str,int fromIndex):返回制定字符串在此字符串中最后一次出现的位置
String replace(char oldchar,char newchar):返回一个新的字符串
String replace(charSequence target,charSequence replacement)

String和其他类型之间的转换

public class StringTest4 {

    public static void main(String[] args) throws UnsupportedEncodingException {
        /*
    复习:String与基本数据类型,包装类之间的转换
    String-->基本数据类型,包装类:请用包装类的静态方法:parseXxx(str)
    基本数据类型,包装类-->String:调用String重载的valueOf()
        */
        String str1 = "123";
        int num = Integer.parseInt(str1);

        String str2 = String.valueOf(num);
        String str3 = num+"1234";//存储在堆里,有字符串拼接在堆里
        System.out.println(num);
        System.out.printf(str2);
        /*
        String 与 char[]之间的替换
        String-->char[]:String.toCharArray
        char[]-->String:调用String构造器
         */
        String str4 = "abc123";
        char[] charArray = str1.toCharArray();
        for(int i=0;i<charArray.length;i++){
            System.out.println(charArray[i]);
        }
        char[] c = new char[]{'a','b','c','d'};
        System.out.println(c);
        String str5 = new String(c);
        System.out.println(str5);
        /*
        String和字节byte[]之间的转换
        String-->byte[]:调用String的getBytes();
        byte[]-->String:调用String的构造器
        编码:字符串-->字节(看得懂--->看不懂的二进制)
        解码:编码的逆过程,字节-->字符串(看不懂二进制数据--->看得懂)
         */
        String str6 = "abc123";
        String str7 = "abc123中国";//
        byte[] bytes = str6.getBytes();
        byte[] bytes1 = str7.getBytes();//[97, 98, 99, 49, 50, 51, -28, -72, -83, -27, -101, -67]
        byte[] bytes2 = str7.getBytes("gbk");//[97, 98, 99, 49, 50, 51, -42, -48, -71, -6]
        System.out.println(Arrays.toString(bytes1));
        System.out.println(Arrays.toString(bytes2));
        String str8 = new String(bytes1);
        String str9 = new String(bytes2);
        System.out.println(str8);//abc123中国
        System.out.println(str9);//abc123�й�
        String str10 = new String(bytes2,"gbk");
        System.out.println(str10);
    }

}

关于StringBuffer和Stringbuilder的使用

/*
    关于StringBuffer和StringBuilder的使用
 */
public class StringBufferTest1 {
    /*
    String,StringBuffer,StringBuilder三者的异同
    String:不可变的字符序列;底层使用char[]存储
    StringBuffer:可变的字符序列;线程安全的,效率低,底层使用char[]存储
    StringBuilder:可变的字符序列;线程不安全的,效率高,底层使用char[]存储

    源码分析:
    String str = new String();//new char[0];
    String str1 = new String("abc");//new char[]{'a','b','c'};

    StringBuffer sb1 = new StringBuffer();//char[] value = new char[16];底层创建了一个长度为16的字符数组
    sb1.append('a');//value[0]='a';
    sb1.append('b');//value[1]='b';

    StringBuffer sb2 = new StringBuffer("abc");char[] value = new char["abc".length()+16];
    问题1:
    System.out.println(sb2.length());//3
    问题2:
    扩容问题:如果要添加的数据底层数据放不下,那就需要扩容底层的数组
     */

    public static void main(String[] args) {
        StringBuffer s1 = new StringBuffer("abc");
        s1.setCharAt(0,'m');
        System.out.println(s1);
        System.out.println();

    /*
    StringBuffer的常用方法
    StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
    StringBuffer delete(int start,int end):删除指定位置的内容
    StringBuffer replace(int start,int end,String str):位置替换为str
    StringBuffer insert(int offset,xxx)在指定位置插入xxx
    StringBuffer reverse():把当前字符序列逆转
    public int indexOf(String str)
    public String substring(int start,int end);
    public int length()
    public  char CharAt(int n);
    public void setCharAt(int n,char ch);
    增:append
    删:delete
    改:setCharAt
    查:charAt
    插入:insert
    遍历:for()+charAt()
    长度:length()
     */

        StringBuffer s2 = new StringBuffer("abc");
        s2.append(1);
        s2.append('1');
        System.out.println(s2);
        //s2.delete(2,4)
        s2.replace(2,4,"hello");
        System.out.println(s2);
        s2.insert(2,false);
        System.out.println(s2);
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值