IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java当中的String类(从源码角度来看(下)) -> 正文阅读

[Java知识库]Java当中的String类(从源码角度来看(下))

接上篇的文章
Java当中的String类(从源码角度来看(上))


本篇文章接着上篇的接续分析到:

String类中的转换方法

toLowerCase()和toUpperCase()方法

toLowerCase()方法就是将字符串里面的所有字符全部转换为小写;
toUpperCase()方法就是将字符串里面的所有字符全部转换为大写。

public class Demo05 {
    public static void main(String[] args) {
        String st = "Xing_CHEN_yu_CHEN_xi";
        System.out.println("toLowerCase执行的结果:" + st.toLowerCase());
        //字符串里面的所有字母转换为小写
        System.out.println("toUpperCase执行的结果:" + st.toUpperCase());
        //将字符串里面的所有字母转换为大写
    }
}

执行结果:
在这里插入图片描述

接下来,小伙伴们可以猜猜下面的执行结果是什么:

public class Demo05 {
    public static void main(String[] args) {
        String st = "DEMO";
        String st1 = st.toUpperCase();
        System.out.println(st1);
        System.out.println(st == st1);
    }
}

true OR false?
在这里插入图片描述

哦? ,答案为true。
那我们就可以猜到一个大概的点,当原字符串与处理后的字符串一样的时候,底层代码是不会再创建新的对象位置存放,而是直接加一个链接给新的地址。可以起到优化存储空间。
在这里插入图片描述

concat()拼接方法

将传入的参数拼接到调用方法的字符串后面。
代码演示:
在这里插入图片描述

直接源码里面的str.getChars(buf,len)方法是添加后面的后继元素。
在这里插入图片描述

在这再强调一下,最底层的代码native方法表示的是本地的方法,使用的是C/C++语言来实现的。

split()分割方法

当一个很长的字符串,我们要将其分割开,就使用这个方法。
需要分割的字符串调用这个方法,然后在方法里面传入需要通过什么来分割的字符。

在这就不多了,一切都在代码里,先演示为敬:
在这里插入图片描述

这里的底层代码有些复杂,我就不做多的分析了。

用指定的符号分割字符串为数组。

这玩意其实是正则表达式,我下篇就说这个。

getBytes()方法

一种编码的方法,将字符串编码为数组的形式进行传播,我们都知道,在程序底层,是不可能将字符串以字符的形式进行保存传输,都是将它转换为数字进行传播的。

左移getBytes()方法就是将它转换为数字的形式转换过来。

代码演示一下:

public class Demo08 {
    public static void main(String[] args) {
        String st = "cabed";
        byte[] ch =  st.getBytes();      //编码
        System.out.println(Arrays.toString(ch));
        String string = new String(ch); //解码
        System.out.println(string);
    }
}

在这里插入图片描述

这个也可以给出指定的区间进行解码:

public class Demo08 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String st = "星辰";
        byte[] ch =  st.getBytes("GBK");      //编码
        System.out.println(Arrays.toString(ch));
        String  string = new String(ch,"GBK");  //解码
        System.out.println(string);
        String string1 = new String(ch,2,2,"GBK"); //解码
        System.out.println(string1); 
    }
}

在这里插入图片描述

api里面的显示:(bytess 编码的数组;offset:编码的格式开始;length:编码长度的格式;charsetName:编码格式)
在这里插入图片描述

toCharArray()方法

将字符串每带个字符进行分开,划分为数组的形式。(可以对其进行排序等操作)

public class Demo08 {
    public static void main(String[] args) {
        String st = "cba";
        char[] ch =  st.toCharArray();
        System.out.println(Arrays.toString(ch));
        Arrays.sort(ch);        //转换为数组,就可以对它进行排序了
        System.out.println(Arrays.toString(ch));
        String st1 = new String(ch);  //将数组转又转换为字符串的形式
        System.out.println(st1);
    }
}

在这里插入图片描述

valueOf()方法

valueOf()方法就是将要转换的对象转换为字符串的形式;
在这里插入图片描述

valueOf能转换的对象都有:
在这里插入图片描述

valueOf就是能够将这些类都转换为String类的。

String类中的替换功能

replace()方法

String replace(char old,char new)
String replace(String old,String new)

代码演示一下:

public class Demo09 {
    public static void main(String[] args) {
        String string = "Xing_Chen_Yu_Chen_Xi";
        String st1 = string.replace('_', '-');
        //将所有的'_'的这个字符换位'-'这个字符
        System.out.println(st1);

        String st2 = string.replace("Chen", "晨");
        //将多有的指定的字符串转换为想要的字符串
        System.out.println(st2);
    }
}

在这里插入图片描述

下来,看一下源代码:
在这里插入图片描述

replaceAll()和replaceFirst()方法

其实在这体验不出来replace()和replaceAll()两个方法的区别,具体区分,主要体现在正则表达式那里,我将在下一篇博客当中说明正则表达式。

replaceFirst()也是替换的方法,这个只不过是指替换第一出线的,后面的都是不用替换的

下面先看看代码演示:

public class Demo09 {
    public static void main(String[] args) {
        String string = "Xing_Chen_Yu_Chen_Xi";
        System.out.println("原字符串:                       " + string);

        String st1 = string.replace("Chen", "晨");
        //将多有的指定的字符串转换为想要的字符串
        System.out.println("replace()方法修改后的字符串:     " + st1);

        String st2 = string.replaceAll("Chen", "晨");
        //将多有的指定的字符串转换为想要的字符串
        System.out.println("replaceAll()方法修改后的字符串:  " + st2);

        String st3 = string.replaceFirst("Chen", "晨");
        System.out.println("replaceFirst()方法修改后的字符串:" + st3);
    }
}

运行结果:
在这里插入图片描述

String类当中去除字符串两边的空格

trim()方法

这个方法就是去掉字符串前后的所有空格

代码演示一下:

public class Demo10 {
    public static void main(String[] args) {
        String string = "  Xing_Chen_Yu_Chen_Xi  ";
        String st = string.trim();
        System.out.println("trim()方法前的字符串长度" + string.length());
        System.out.println("trim()方法后的字符串长度" + st.length());
    }
}

执行结果:
在这里插入图片描述

因为我在字符串的前后都各输入有2个空格。所以前后都减去,就剩20个了。

下来,看一下这个方法的源码:

    public String trim() {
        int len = value.length;  //获得字符串的长度

        //创建一个变量,用于记录前面有几个空格,或者说有字符的字符串开始的位置
        int st = 0;              
        
        //结构字符串转换过来的数组
        char[] val = value;    /* avoid getfield opcode */

        //循环并记录字符串前面有几个空格,或者说记录要从数组当中第几个位置开始
        while ((st < len) && (val[st] <= ' ')) {
            st++;
        }
        
        //循环,通过len长度减,记录出将字符串后面的空格删除后,到那个位置结束
        while ((st < len) && (val[len - 1] <= ' ')) {
            len--;
        }
        
        //return输出新的字符串
        return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
    }

本篇博客也就到此为止了,这个专题也就整理到此为止了,下篇介绍一下正则表达式

这也是我重读javase基础的一个系列,比起当时初学的时候,现在看问题多了个高度,理解什么也相对轻松一点全面一些。学习起来更加偏向阅读源码来看,所以多为大家分享看源码。
但毕竟学过时间也较长,有什么不对和漏缺的地方,希望大家指出。
欢迎大家在评论区讨论


上篇: ===》 Java当中的String类(从源码角度来看(上))
下篇:===》 正则表达式(演示邮箱和电话)

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 11:43:27  更:2022-05-10 11:47:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:55:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码