常用类---String

常用类-String类

1.1. String类不可变

  • String是一个字符串类,是不可变的字符串
  • 一旦改动字符串内容 就是生成新的对象
  • 底层存储使用的是字符数组,使用final修饰 因此不可更改

1.2.常用的方法

1,构造方法

 public static void main(String[] args) {
        String s1 = new String();// ""
        String s2 = new String("java");// "java"
        char[] chars = {'9', '中', 'c', 'd', 'e'};
        String s3 = new String(chars, 2, 3);
        byte[] bytes = {65, 66, 99, 100};
        String s4 = new String(bytes);// 是字符的ascii码值
        System.out.println(s4);//
    }

2,常见的字符编码

01101010

ACSII 每个字符都占用要一个字节 128

ISO-8859-1 ,欧洲用到字符是远远多于128个的 对ASCII码进行了扩展 2个字节可以存储65536 字符

GBK/ GB2312 针对中文的字符编码 中文汉字一般占用2个字节

乱码 字符的编码和解码用的字符编码不一致

UTF定义了一套规范 统一全球的编码规范

​ UTF-8 中文汉字一般占用3个字节,英文字符只占一个字节

​ UTF-16

3,比较判断方法

  • length() 返回字符串字符序列长度
  • equals() 返回boolean值
  • equalsIgnoreCase() 返回boolean值
  • startsWith() 返回boolean值
  • endsWith() 返回boolean值

4,将字符串转化数组方法:split();

public static void main(String[] args) {
        // String类内部使用字符数组保存 字符串序列
        String s1 = new String("JavaSM");  // char[] str={'j','a','v','a' }
        String s2 = new String("javasm");
        // length() 字符串中字符的长度
        int length = s1.length();
        System.out.println("字符串长度" + length);
        // 1,equals()比较的是字符序列是否一一相等
        boolean flag1 = s1.equals(s2);
        System.out.println("使用equals进行比较" + flag1);
        // 2,equalsIgnoreCase()比较的是字符序列是否一一相等
        boolean flag2 = s1.equalsIgnoreCase(s2);
        System.out.println("使用equalsIgnoreCase忽略大小写进行比较" + flag2);
        // 3,startsWith()
        boolean flag3 = s1.startsWith("JavaSM", 0);
        System.out.println("是否以某个字符串开头" + flag3);
        // 4,endsWith()
        boolean flag4 = s1.endsWith("JavaSM");
        System.out.println("是否以某个字符串结束" + flag4);
    }

4,字符串搜索

  • indexOf()

  • lastIndexOf()

    返回字符或者字符串出现的索引值

    如果找不到返回值都是 -1

public static void main(String[] args) {
        String a = "javasmvava";//char[]
        int index = a.indexOf('a',12);
        int lastIndex = a.lastIndexOf('a');
        System.out.println("字符首次出现的索引值" + index);
        System.out.println("字符最后一次出现的索引值" + lastIndex);
        // char-> int
        int strIndex = a.indexOf("vab");
        int strLastIndex = a.lastIndexOf("va");
        System.out.println("字符串首次出现的索引值" + strIndex);
        System.out.println("字符串最后一次出现的索引值" + strLastIndex);

    }

5,提取字符串

  • char chartAt() 返回char
  • String trim() 去除前后空格
  • replace() 替换
  • replaceAll()
public static void main(String[] args) {
        String s1 = "javasunoracle";//char[] {j,a,v,a}
      /*  System.out.println(s1.hashCode());
        s1 = "sm";
        System.out.println(s1.hashCode());*/
        // 返回指定的索引对应的字符
        char c = s1.charAt(1);// return
        System.out.println(c);
        String s2 = s1.trim();
        System.out.println(s1);
        System.out.println("去除前后空格" + s2);
        String s3 = s1.replace('a', 'w'); //jwvw
        String s4 = s1.replaceAll("av", "wb");
        System.out.println(s3);
        System.out.println("替换所有" + s4);
        System.out.println(s1);// jwvw
        // concat 拼接
        String s5 = s1.concat("oracle");
        System.out.println("拼接 " + s5);
        // substring 截取字串
        String s6 = s1.substring(4);
        // 前闭后开 [)
        String s7 = s1.substring(4, 7);
        System.out.println(s6);
        System.out.println(s7);
        // 切分
        String[] strs = s1.split("a");
        System.out.println(Arrays.toString(strs));
    }
// 按指定符号进行拼接字符串  	
String join = String.join("&", "java", "sun","oa");
        System.out.println(join);

6,大小写转换

 public static void main(String[] args) {
        String s1 = "javaSUNoracle";//char[] {j,a,v,a}
        String s2 = s1.toUpperCase();
        System.out.println(s2);
        String s3 = s1.toLowerCase();
        System.out.println(s3);
    }

扩展点:

//可变长参数 传0或者多个都可以 本质上是一个数组来接收  
public static String join(CharSequence delimiter, CharSequence... elements) {
        Objects.requireNonNull(delimiter);
        Objects.requireNonNull(elements);
        // Number of elements not likely worth Arrays.stream overhead.
        StringJoiner joiner = new StringJoiner(delimiter);
        for (CharSequence cs: elements) {
            joiner.add(cs);
        }
        return joiner.toString();
    }

7,格式转换

 public static void main(String[] args) throws UnsupportedEncodingException {
        String s1 = "中国abc";
        //1,转字节数组,默认使用UTF-8进行编码解码
        byte[] bytes = s1.getBytes("GBK");
        System.out.println(Arrays.toString(bytes));
        String string = new String(bytes,"GBK");
        System.out.println(string);
        //2,转字符数组
        char[] chars = s1.toCharArray();
        System.out.println(Arrays.toString(chars));
    }

1.3.字符串常量池

  • JVM为了节省内存空间 提高性能 提供了一个字符串常量池
  • 在给String引用赋值的时候 会首先查看常量池中是否有此字符序列 如果没有就创建 如果有直接返回内存地址
  • 使用+连接字符串的时候 如果都是字符串常量 也是先去常量池中查找;如果+ 旁边有变量 此时生成的字面量会放入一个临时缓冲区中
public static void main(String[] args) {
        String s1 = "java";
        String s2 = "java";
        String s3 = new String("java");
        System.out.println(s1 == s2);
        System.out.println(s1 == s3);
        String s4 = "javasm";
        s1 = s1 + "sm";
    	//s1 = "java" + "sm";
        System.out.println(s1 == s4);//true
    }

StringBuffer/StringBuilder可变长

1.1. StringBuffer类

StringBuffer是线程安全的,性能较低

StringBuilder线程不安全,性能较高

常用方法

public static void main(String[] args) {
        StringBuilder stringBuilder2 = new StringBuilder();
        StringBuilder stringBuilder1 = new StringBuilder("ja");
        System.out.println(stringBuilder1.hashCode());
        //append是追加 在原串后面添加字符串
        stringBuilder1.append("va");
        stringBuilder1.append("sun");
        System.out.println(stringBuilder1);
        // 获取长度
        System.out.println(stringBuilder1.length());
        // 颠倒字符序列 reverse会改动源字符序列
//        StringBuilder reverse = stringBuilder1.reverse();
        System.out.println("源SB:" + stringBuilder1);
//        System.out.println(reverse);
        // 索引: [)
        stringBuilder1.delete(2, 4);
        System.out.println("delete :" + stringBuilder1);
        //指定索引位 进行插入
        stringBuilder1.insert(1, "oracle");
        System.out.println("insert:" + stringBuilder1);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值