String类基本使用

news2025/4/14 16:51:12

文章目录

  • 1. String类的理解和创建对象
  • 2. 创建String对象的两种方式
  • 3. 两种创建String对象的区别
  • 4. 测试
  • 5. 字符串的特性
  • 6. String 类的常见方法

1. String类的理解和创建对象

  1. String 对象用于保存字符串,也就是一组字符序列
  2. 字符串常量对象是用双引号括起的字符序列。例如:“你好”、“12.97”、"boy"等
  3. 字符串的字符使用Unicode字符编码
  4. String类较常用构造器:一个字符(不区分字母还是汉字)占两个字节
String s1 = new String();
String s2 = new String(String original);
String s3 = new String(char[] a);
String s4 = new String(char[] a, intstartIndex, intcount);
String s5 = new String(byte[] b);

在这里插入图片描述

public static void main(String[] args) {
 //1. String 对象用于保存字符串,也就是一组字符序列
 //2. "jack" 字符串常量, 双引号括起的字符序列
 //3. 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
 //4. String 类有很多构造器,构造器的重载
 //   常用的有 String  s1 = new String(); //
 //String  s2 = new String(String original);
 //String  s3 = new String(char[] a);
 //String  s4 =  new String(char[] a,int startIndex,int count)
 //String s5 = new String(byte[] b)
 //5. String 类实现了接口 Serializable【String 可以串行化:可以在网络传输】
 //                 接口 Comparable [String 对象可以比较大小]
 //6. String 是final 类,不能被其他的类继承
 //7. String 有属性 private final char value[]; 用于存放字符串内容
 //8. 一定要注意:value 是一个final类型, 不可以修改:即value不能指向
 //   新的地址,但是单个字符内容是可以变化

 String name = "jack";
 name = "tom";
 final char[] value = {'a','b','c'};
 char[] v2 = {'t','o','m'};
 value[0] = 'H';
 //value = v2; 不可以修改 value地址
}

2. 创建String对象的两种方式

  1. 方式1:直接赋值 String s = “兮动人”;
  2. 方式2:调用构造器 String s = new String(“xdr”);

3. 两种创建String对象的区别

  • 方式一:直接赋值 String s = "xdr";
  • 方式二:调用构造器 String s2 = new String("xdr”):
  1. 方式一:先从常量池查看是否有“xdr”数据空间,如果有,直接指向;如果
    没有则重新创建,然后指向。s最终指向的是常量池的空间地址
  2. 方式二:先在堆中创建空间,里面维护了value属性,指向常量池的xdr空间
    如果常量池没有”xdr”,重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址
  3. 画出两种方式的内存分布图

在这里插入图片描述

4. 测试

  • 测试1
String a = "abc";
String b = "abc";
System.out.println(a.equals(b)); // T
System.out.println(a == b);     // T
  • 测试2
String a = new String("abc");
String b = new String("abc");
System.out.println(a.equals(b)); // T
System.out.println(a == b); // F
  • 测试3
String a="xdr"; // a指向常量池的 "xdr"
String b=new String("xdr"); // b指向堆中对象
System.out.println(a.equals(b)); // T
System.out.println(a==b); // F
System.out.println(a==b.intern()); // T
System.out.println(b==b.intern()); // F
  • 当调用intern方法时,如果池已经包含一个等于此String对象的字符串(用equals(Object)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回此String对象的引用

  • b.intern(方法最终返回的是常量池的地址(对象)

  • 测试4

public class StringExercise04 {

    public static void main(String[] args) {
        String s1 = "xdr630"; // 指向常量池 xdr630
        String s2 = "java"; // 指向常量池 java
        String s3 = new String("java"); // 指向堆栈中的对象
        String s4 = "java"; // 指向常量池 java
        System.out.println(s1 == s2); // false
        System.out.println(s2 == s3); // false
        System.out.println(s2.equals(s3)); // true
        System.out.println(s2 == s4); // true
    }
}
  • 测试5
public class StringExercise05 {

    public static void main(String[] args) {
        Person p1 = new Person();
        p1.name = "xdr630";
        Person p2 = new Person();
        p2.name = "xdr630";

        System.out.println(p1.name.equals(p2.name)); // 比较内容:true
        System.out.println(p1.name == p2.name); // true
        System.out.println(p1.name == "xdr630"); // true

        String s1 = new String("xdr");
        String s2 = new String("xdr");
        System.out.println(s1 == s2); // false
    }

}

5. 字符串的特性

  1. String是一个final类,代表不可变的字符序列
  2. 字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的

6. String 类的常见方法

  • String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因
    此java设计者还提供了StringBuilderStringBuffer来增强String的功能
    并提高效率。

String类的常见方法1

equals//区分大小写,判断内容是否相等
equalslgnoreCase//忽略大小写的判断内容是否相等
length//获取字符的个数,字符串的长度
indexOf//获取字符在字符串中第1次出现的索引,索引从0开始,如果找不到,返回-1
lastlndexOf//获取字符在字符串中最后1次出现的索引,索引从o开始,如找不到,返回-1
substring//截取指定范围的子串
trim//去前后空格
charAt:获取某索引l处的字符,注意不能使用Str[index]这种方式
public class StringMethod01 {
    public static void main(String[] args) {
        //1. equals 前面已经讲过了. 比较内容是否相同,区分大小写
        String str1 = "hello";
        String str2 = "Hello";
        System.out.println(str1.equals(str2));//

        // 2.equalsIgnoreCase 忽略大小写的判断内容是否相等
        String username = "johN";
        if ("john".equalsIgnoreCase(username)) {
            System.out.println("Success!");
        } else {
            System.out.println("Failure!");
        }
        // 3.length 获取字符的个数,字符串的长度
        System.out.println("兮动人".length());
        // 4.indexOf 获取字符在字符串对象中第一次出现的索引,索引从0开始,如果找不到,返回-1
        String s1 = "wer@terwe@g";
        int index = s1.indexOf('@');
        System.out.println(index);// 3
        System.out.println("weIndex=" + s1.indexOf("we"));//0
        // 5.lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从0开始,如果找不到,返回-1
        s1 = "wer@terwe@g@";
        index = s1.lastIndexOf('@');
        System.out.println(index);//11
        System.out.println("ter的位置=" + s1.lastIndexOf("ter"));//4
        // 6.substring 截取指定范围的子串
        String name = "hello,张三";
        //下面name.substring(6) 从索引6开始截取后面所有的内容
        System.out.println(name.substring(6));//截取后面的字符
        //name.substring(0,5)表示从索引0开始截取,截取到索引 5-1=4位置
        System.out.println(name.substring(2,5));//llo

    }
}

在这里插入图片描述

String类的常见方法2

toUpperCase
toLowerCase
concat
replace替换字符串中的字符
split分割字符串,对于某些分割字符,我们需要转义比如|\等
案例:Stringpoem=“锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦”;和文
件路径.
compareTo//比较两个字符串的大小
toCharArray//转换成字符数组
format//格式字符串,%s字符串%c字符%d整型%.2f浮点型
  • 案例,将一个人的信息格式化输出
public class StringMethod02 {
    public static void main(String[] args) {
        // 1.toUpperCase转换成大写
        String s = "heLLo";
        System.out.println(s.toUpperCase());//HELLO
        // 2.toLowerCase
        System.out.println(s.toLowerCase());//hello
        // 3.concat拼接字符串
        String s1 = "宝玉";
        s1 = s1.concat("林黛玉").concat("薛宝钗").concat("together");
        System.out.println(s1);//宝玉林黛玉薛宝钗together
        // 4.replace 替换字符串中的字符
        s1 = "宝玉 and 林黛玉 林黛玉 林黛玉";
        //在s1中,将 所有的 林黛玉 替换成薛宝钗
        // 解读: s1.replace() 方法执行后,返回的结果才是替换过的.
        // 注意对 s1没有任何影响
        String s11 = s1.replace("宝玉", "jack");
        System.out.println(s1);//宝玉 and 林黛玉 林黛玉 林黛玉
        System.out.println(s11);//jack and 林黛玉 林黛玉 林黛玉
        // 5.split 分割字符串, 对于某些分割字符,我们需要 转义比如 | \\等
        String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
        //解读:
        // 1. 以 , 为标准对 poem 进行分割 , 返回一个数组
        // 2. 在对字符串进行分割时,如果有特殊字符,需要加入 转义符 \
        String[] split = poem.split(",");
        poem = "E:\\aaa\\bbb";
        split = poem.split("\\\\");
        System.out.println("==分割后内容===");
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }
        // 6.toCharArray 转换成字符数组
        s = "happy";
        char[] chs = s.toCharArray();
        for (int i = 0; i < chs.length; i++) {
            System.out.println(chs[i]);
        }
        // 7.compareTo 比较两个字符串的大小,如果前者大,
        // 则返回正数,后者大,则返回负数,如果相等,返回0
        // 解读
        // (1) 如果长度相同,并且每个字符也相同,就返回 0
        // (2) 如果长度相同或者不相同,但是在进行比较时,可以区分大小
        //     就返回 if (c1 != c2) {
        //                return c1 - c2;
        //            }
        // (3) 如果前面的部分都相同,就返回 str1.len - str2.len
        String a = "jcck";// len = 3
        String b = "jack";// len = 4
        System.out.println(a.compareTo(b)); // 返回值是 'c' - 'a' = 2的值
        // 8.format 格式字符串
        /* 占位符有:
         * %s 字符串 %c 字符 %d 整型 %.2f 浮点型
         *
         */
        String name = "xdr630";
        int age = 27;
        double score = 96.857;
        char gender = '男';
        //将所有的信息都拼接在一个字符串.
        String info =
            "我的姓名是" + name + "年龄是" + age + ",成绩是" + score + "性别是" + gender + "。希望大家喜欢我!";

        System.out.println(info);

        //1. %s , %d , %.2f %c 称为占位符
        //2. 这些占位符由后面变量来替换
        //3. %s 表示后面由 字符串来替换
        //4. %d 是整数来替换
        //5. %.2f 表示使用小数来替换,替换后,只会保留小数点两位, 并且进行四舍五入的处理
        //6. %c 使用char 类型来替换
        String formatStr = "我的姓名是%s 年龄是%d,成绩是%.2f 性别是%c.希望大家喜欢我!";

        String info2 = String.format(formatStr, name, age, score, gender);

        System.out.println("info2=" + info2);
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2333935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为机试—火车进站

题目 火车站一共有 n 辆火车需要入站&#xff0c;每辆火车有一个编号&#xff0c;编号为 1 到 n。 同时&#xff0c;也有火车需要出站&#xff0c;由于火车站进出共享一个轨道&#xff0c;所以后入站的火车需要先出站。换句话说&#xff0c;对于某一辆火车&#xff0c;只有在它…

Python数组(array)学习之旅:数据结构的奇妙冒险

Python数组学习之旅:数据结构的奇妙冒险 第一天:初识数组的惊喜 阳光透过窗帘缝隙洒进李明的房间,照亮了他桌上摊开的笔记本和笔记本电脑。作为一名刚刚转行的金融分析师,李明已经坚持学习Python编程一个月了。他的眼睛因为昨晚熬夜编程而微微发红,但脸上却挂着期待的微…

spark-core编程2

Key-Value类型&#xff1a; foldByKey 当分区内计算规则和分区间计算规则相同时&#xff0c;aggregateByKey 就可以简化为 foldByKey combineByKey 最通用的对 key-value 型 rdd 进行聚集操作的聚集函数&#xff08;aggregation function&#xff09;。类似于aggregate()&…

AIDD-人工智能药物设计-大语言模型在医学领域的革命性应用

Nat. Rev. Bioeng. | 大语言模型在医学领域的革命性应用 大型语言模型&#xff08;LLMs&#xff09;&#xff0c;如 ChatGPT&#xff0c;因其对人类语言的理解与生成能力而备受关注。尽管越来越多研究探索其在临床诊断辅助、医学教育等任务中的应用&#xff0c;但关于其发展、…

Windows 系统中安装 Git 并配置 GitHub 账户

由于电脑重装系统&#xff0c;重新配置了git. 以下是在 Windows 系统中安装 Git 并配置 GitHub 账户的详细步骤&#xff1a; 1. 安装 Git 访问 Git 官网下载页面下载 Windows 版本的 Git 安装程序运行安装程序&#xff0c;使用默认选项即可 2. 配置 Git 用户信息 打开命令…

QQ风格客服聊天窗口

QQ风格客服聊天窗口 展示引入方式 展示 引入方式 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

MCU刷写——Hex文件格式详解及Python代码

工作之余来写写关于MCU的Bootloader刷写的相关知识,以免忘记。今天就来聊聊Hex这种文件的格式,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢…

汇舟问卷:国外问卷调查技巧有哪些,具体该怎么操作

大家好&#xff0c;我是汇舟问卷&#xff0c;今天咱们就聊聊国外问卷答题的技巧和操作步骤&#xff0c;保你听完立马能上手&#xff01; 一、答题前先创建人设 1&#xff0c;进题时先瞄两眼问题&#xff0c;快速判断问卷主题&#xff0c;再定人设。比如遇到奶粉问卷&#xff…

C++标识符:检查是否和保留字冲突

1. 基础知识 最基本的要求&#xff1a; 字母、数字、下划线组成&#xff0c; 并且不能是数字开头。 禁忌1&#xff1a; C 关键字不能用做标识符。 它们是&#xff1a; alignas alignof asm auto bool break case catch char char16_t char32_t class const constexpr const_…

《Python星球日记》第27天:Seaborn 可视化

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏&#xff1a;《Python星球日记》&#xff0c;限时特价订阅中ing 目录 一、Seabor…

自动驾驶技术-相机_IMU时空标定

自动驾驶技术-相机_IMU时空标定 时间延迟 时间延迟 参考链接1、2 相机主要分为全局和卷帘快门相机&#xff0c;从触发到成像的过程包括&#xff1a;复位时间、AE()曝光时间、读出时间 全局快门如下图所示 卷帘快门如下图所示 相机录制视频时&#xff0c;为了保持固定频率&am…

”插入排序“”选择排序“

文章目录 插入排序1. 直接插入排序(O(n^2))举例1&#xff1a;举例2&#xff1a;直插排序的"代码"直插排序的“时间复杂度” 2. 希尔排序(O(n^1.3))方法一方法二(时间复杂度更优) 选择排序堆排序直接选择排序 我们学过冒泡排序&#xff0c;堆排序等等。&#xff08;回…

Python深度学习基础——卷积神经网络(CNN)(PyTorch)

CNN原理 从DNN到CNN 卷积层与汇聚 深度神经网络DNN中&#xff0c;相邻层的所有神经元之间都有连接&#xff0c;这叫全连接&#xff1b;卷积神经网络 CNN 中&#xff0c;新增了卷积层&#xff08;Convolution&#xff09;与汇聚&#xff08;Pooling&#xff09;。DNN 的全连接…

MTK7628基于原厂的mtk-openwrt-sdk-20160324-8f8e4f1e.tar.bz2 源代码包,配置成单网口模式的方法

一、配置. 在SDK工程下&#xff0c;运行make kernel_menuconfig&#xff0c;如下图所示&#xff1a; Ralink Module --->选上“One Port Only”&#xff0c;如下图所示&#xff1a; 如果P0网口实现WAN口&#xff0c;就配置成W/LLLL,否则就配置成LLLL/W. 二、修改网口的原代…

艾伦·图灵:计算机科学与人工智能之父

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 艾伦图灵&#xff1a;计算机科学与人工智能之父 一、天才的诞生与早期生涯 1912年6月…

策略模式实现 Bean 注入时怎么知道具体注入的是哪个 Bean?

Autowire Resource 的区别 1.来源不同&#xff1a;其中 Autowire 是 Spring2.5 定义的注解&#xff0c;而 Resource 是 Java 定义的注解 2.依赖查找的顺序不同&#xff1a; 依赖注入的功能&#xff0c;是通过先在 Spring IoC 容器中查找对象&#xff0c;再将对象注入引入到当…

React九案例中

代码下载 地图找房模块 顶部导航栏 封装NavHeader组件实现城市选择&#xff0c;地图找房页面的复用&#xff0c;在 components 目录中创建组件 NavHeader&#xff0c;把之前城市列表写过的样式复制到 NavHeader.scss 下&#xff0c;在该组件中封装 antd-mobile 组件库中的 N…

第一期:[特殊字符] 深入理解MyBatis[特殊字符]从JDBC到MyBatis——持久层开发的转折点[特殊字符]

前言 &#x1f31f; 在软件开发的过程中&#xff0c;持久层&#xff08;或数据访问层&#xff09;是与数据库进行交互的关键部分。早期&#xff0c;开发者通常使用 JDBC&#xff08;Java Database Connectivity&#xff09;来实现与数据库的连接与操作。虽然 JDBC 在一定程度上…

Adobe Photoshop 2025 Mac中文 Ps图像编辑

Adobe Photoshop 2025 Mac中文 Ps图像编辑 一、介绍 Adobe Photoshop 2025 Mac版集成了多种强大的图像编辑、处理和创作功能。①强化了Adobe Sensei AI的应用&#xff0c;通过智能抠图、自动修复、图像生成等功能&#xff0c;用户能够快速而精确地编辑图像。②3D编辑和动画功…

用纯Qt实现GB28181协议/实时视频/云台控制/预置位/录像回放和下载/事件订阅/语音对讲

一、前言 在技术的长河中探索&#xff0c;有些目标一旦确立&#xff0c;便如同璀璨星辰&#xff0c;指引着我们不断前行。早在2014年&#xff0c;我心中就种下了用纯Qt实现GB28181协议的种子&#xff0c;如今回首&#xff0c;一晃十年已逝&#xff0c;好在整体框架和逻辑终于打…