【Day24】常用类

day24-阶段总结和考试 摘要: 本文总结了Python全栈开发第三阶段的重点内容,涵盖并发编程与网络编程的结合、并发与并行的区别、单例模式的实现方式等知识点。通过多线程/多进程socket服务端案例展示了网络编程的效率优化,并对比了串行、并发和并行的概念。此外,提供了阶段思维导图总结和考试题,包括面向对象特性、类方法、单例模式实现等,帮助学员巩固模块知识。相关资源可在优快云下载。 阅读详情

目录

1、关于StringBuffer和StringBuilder的使用

2、String的使用

3、字符串的相关使用

4、涉及到String类与其他结构之间的转换


1、关于StringBuffer和StringBuilder的使用

public class StringBufferBuilderTest {

    /*
    String、StringBuffer、StringBuilder三者的异同
    String:不可变的字符序列;底层使用char[]存储

    StringBuffer:可变的字符序列,线程安全,效率低;底层使用char[]存储
    StringBuilder:可变的字符序列,线程不安全,效率高:JDK5.0新增;底层使用char[]存储
     */


    /*
    StringBuffer的常用方法:
    StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
    StringBuffer delete(int start,int end):删除指定位置的内容
    StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
    StringBuffer insert(int offset, xxx):在指定位置插入xxx
    StringBuffer reverse() :把当前字符序列逆转

    public int indexOf(String str) 返回指定字符在字符串中首次出现的位置
    public String substring(int start,int end)返回一个从start开始到end索引结束的左闭右开区间的子字符串
    public int length()数组长度
    public char charAt(int n )查找指定字符
    public void setCharAt(int n ,char ch)将指定的位置字符改为新的

    总结:
    增:append
    删:delete
    改:setCharAt(int n,char ch)
    查:charAt();
    长度:length()
    遍历:for()+charAt()/toString()

     */
    @Test
    public void test1(){
        StringBuffer str=new StringBuffer("abc");
        str=str.append("ll");
        System.out.println(str);
//        str.delete(1,3);//前面包括,后面不包括
//        System.out.println(str);
//        str.replace(1,3,"bb");
//        str.reverse();
        str.insert(2,"hahah");
        System.out.println(str);

        System.out.println(str.charAt(2));
    }

}

2、String的使用

/*
String:字符串,使用一对“”引起来表示
1、String声明为final的,不可能被继承
2、String实现了Serializable接口:表示字符串是支持序列化的。
    实现了Comparable接口:表示String可以比较大小
3、String内部定义了final char[] value用于存储字符串数据
4、String:代表不可变的字符序列。简称:不可变性。
    体现:1、对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。
         2、对原有的字符串进行链接操作时,也需要重新指定内存区域赋值,能使用原有的value进行赋值。
         3、当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,能使用原有的value进行赋值。
5、通过字面量的方式(区别与new)给一个字符串赋值,此时的字符串声明子啊字符串常量池中
6、字符串常量池中是不会存储相同内容的字符串的
 */

person类

public class Person {

    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

}

测试代码

public class StringTest {
    
    @Test
    public void test1(){
        String s1="abc";    //字面量,不需要new,String是一个类
        String s2="abc";
        System.out.println(s1==s2);     //比较地址值true

        s1="hello";

        System.out.println(s1);//hello
        System.out.println(s2);//abc

        System.out.println("***********************************");
        String s3="abc";
        s3+="def";
        System.out.println(s3);     //abcdef
        System.out.println(s2);     //abc
        System.out.println("*********************");

        String s4="abc";
        String s5=s4.replace('a','m');
        System.out.println(s4);     //abc
        System.out.println(s5);     //mbc
    }

    /*
    String的实例化方式
    方式一:通过字面量定义的方式
    方式二:通过new + 构造器的方法

     */
    @Test
    public void test2(){
        //通过字面量的方式:此时的s1和s2的数据javaEE声明在方法区中的字符串常量池中
        String s1= "javaEE";
        String s2="javaEE";
        //通过new + 构造器的方法:此时s3和s4保存的地址值,是数据在堆空间中开辟空间以后对变量赋值
        String s3=new String("javaEE");
        String s4=new String("javaEE");

        System.out.println(s1==s2);//true
        System.out.println(s1==s3);//false
        System.out.println(s1==s4);//false
        System.out.println(s3==s4);//false

        System.out.println("***************************");
        Person p1=new Person("tom",12);
        Person p2=new Person("tom",12);

        System.out.println(p1.name.equals(p2.name));//true
        System.out.println(p1.name == p2.name);//true

        p1.name="jerry";
        System.out.println(p1.name);//jerry
        System.out.println(p1.name == p2.name);//false

    }

    /*
    结论:
    1、常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
    2、只要其中有一个是变量,结果就在堆中
    3、如果拼接的结果调用intern()方法,返回值就在常量池中
     */
    @Test
    public void test3(){
        String s1="javaEE";
        String s2="hadoop";

        String s3="javaEEhadoop";
        String s4="javaEE"+"hadoop";
        String s5=s1+"hadoop";
        String s6="javaEE"+s2;
        String s7=s1=s2;

        System.out.println(s3==s4);//true
        System.out.println(s3==s5);//false
        System.out.println(s3==s6);//false
        System.out.println(s3==s7);//false
        System.out.println(s5==s6);//false
        System.out.println(s6==s7);//false

        String s8=s5.intern();//返回值得到s8使用的常量值中已经存在的
        System.out.println(s3==s8);
    }

}

3、字符串的相关使用

/**
 * 
 * int length():返回字符串的长度: return value.length
 *  char charAt(int index): 返回某索引处的字符return value[index]
 *  boolean isEmpty():判断是否是空字符串:return value.length == 0
 *  String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写
 *  String toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写
 *  String trim():返回字符串的副本,忽略前导空白和尾部空白
 *  boolean equals(Object obj):比较字符串的内容是否相同
 *  boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大
 * 小写
 *  String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”
 *  int compareTo(String anotherString):比较两个字符串的大小
 *  String substring(int beginIndex):返回一个新的字符串,它是此字符串的从
 * beginIndex开始截取到最后的一个子字符串。
 *  String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字
 * 符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
 * 
 */
public class StringMethodTest {
    @Test
    public void test(){
        String s1="HelloWord";
        String s2="   hell owo  rd   ";
        System.out.println(s1.length());
        System.out.println(s1.charAt(1));
        System.out.println(s1.charAt(5));
        System.out.println(s1.isEmpty());
        System.out.println(s1.toLowerCase(Locale.ROOT));
        System.out.println(s1.toUpperCase(Locale.ROOT));
        System.out.println(s2.trim());

    }
    @Test
    public void test2(){
        String s1="HELLOWORD";
        String s2="helloword";
        System.out.println(s1.equals(s2));
        System.out.println(s1.equalsIgnoreCase(s2));

        String s3="abc";
        String s4=s3.concat("def");
        System.out.println(s4);

        String s5="abc";
        String s6=new String("abe");
        System.out.println(s5.compareTo(s6));

        String s7="北大青鸟北大青鸟北大青鸟";
        String s8=s7.substring(1);
        System.out.println(s8);

        String s9=s7.substring(1,3);
        System.out.println(s9);
    }

    /*
     boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
     boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始
     boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的
子字符串是否以指定前缀开始
     */
    @Test
    public void test3(){
        String str1="helloword";
        boolean b1=str1.endsWith("word");
        System.out.println(b1);

        boolean b2=str1.startsWith("hll");
        System.out.println(b2);

        boolean b3=str1.startsWith("ll",2);//判断从第二个开始,是否以ll开头,ll为指定前缀
        System.out.println(b3);
    }

    /*
     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):返回指定子字符串在此字符串中最后
    一次出现处的索引,从指定的索引开始反向搜索

    注:indexOf和lastIndexOf方法如果未找到都是返回-1

     */
    @Test
    public void test4(){
        String str1="helloword";
        System.out.println(str1.contains("llo"));//是否包含字符串

        System.out.println(str1.indexOf("ll"));

        System.out.println(str1.indexOf("ll",3));//从指定位置往后找,包含指定位置

        String str2="helloword";
        System.out.println(str2.lastIndexOf("l",4));//从后往前找,输出的数据依然是下标值
    }

    /*
     String replace(char oldChar, char newChar):返回一个新的字符串,它是
    通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
     String replace(CharSequence target, CharSequence replacement):使
    用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
     String replaceAll(String regex, String replacement) : 使 用 给 定 的
    replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
     String replaceFirst(String regex, String replacement) : 使 用 给 定 的
    replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
     boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
     String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
     String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此
    字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。
     */

    @Test
    public void test5(){
        String str1="北大青鸟北大青鸟";
        String str2=str1.replace("北","东");
        System.out.println(str1);
        System.out.println(str2);

        System.out.println("***************************");

        String str = "12hello34world5java7891mysql456";
        //把字符串中的数字替换成,,如果结果中开头和结尾有,的话去掉
        String string = str.replaceAll("\\d+", ",").replaceAll("^,|,$", "");
        System.out.println(string);

        System.out.println("****************************");

        String str3 = "12345";
        //判断str字符串中是否全部有数字组成,即有1-n个数字组成
        boolean matches = str3.matches("\\d+");
        System.out.println(matches);
        String tel = "0571-4534289";
        //判断这是否是一个杭州的固定电话
        boolean result = tel.matches("0571-\\d{7,8}");
        System.out.println(result);

        System.out.println("****************************");
        str = "hello|world|java";
        String[] strs = str.split("\\|");
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }
        System.out.println();
        str2 = "hello.world.java";
        String[] strs2 = str2.split("\\.");
        for (int i = 0; i < strs2.length; i++) {
            System.out.println(strs2[i]);
        }

    }
}

4、涉及到String类与其他结构之间的转换

/*
复习:
String 与基本数据类型、包装类之间的转换

String-->基本数据类型、包装类:调用包装类的静态方法:parsexxx(str)
基本数据类型、包装类-->String:调用String重载的valuOf(xxx)
 */
public class StringTest1 {
    
    @Test
    public void test(){
        String str1="123";

        int num=Integer.parseInt(str1);

        String str2=String.valueOf(num);
        String str3=num+"";

        System.out.println(str1==str3);
    }

    /*
    String 与 char[]之间的转换
    String --->char[]
     */
    @Test
    public void test2(){
        String str1="abc123";
        char[] charArray=str1.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            System.out.println(charArray[i]);

        }
    }
}

 

ShipIt Day:24小时内部创新马拉松实战指南 ShipIt Day是一种以交付为导向的内部技术实践,本质是限时、限域、限交付标准的工程化创新机制。其核心原理在于利用24小时时间压力倒逼需求具象化、环境隔离和最小可行闭环设计,从而规避过度工程与流程空转。该模式的技术价值在于将工程师从‘功能实现者’重塑为‘问题终结者’,显著提升内部工具的可用性、可维护性与跨职能协同效率。典型应用场景包括运维提效脚本开发、遗留系统轻量重构、跨部门数据流治理及客户触达策略验证等。本文深入解析ShipIt Day的七道实操关卡与十四届沉淀的避坑方法论。 阅读详情

相关推荐

FedEx Day实战指南:24小时内部创新机制的工程化落地

FedEx Day是一种以时间约束驱动真实交付的技术创新机制,其本质是将工程师自治、最小可行产品(MVP)思维与组织支撑体系深度融合的工程实践。它源于对‘无限优化陷阱’和‘演示即终点’等研发顽疾的系统性回应,核心原理在于利用24小时生理节律窗口强制闭环验证,并通过‘寄出去’规则建立用户反馈回路。该机制的技术价值在于提升需求真实性、加速知识沉淀与强化跨职能协作,广泛应用于技术咨询公司、开源项目及SaaS企业内部工具孵化、流程提效与人才成长场景。Six Feet Up 的Python/Django实践提供了可复

weixin_30846347的博客 362

【Java 基础篇】Java 字符串操作

本篇博客围绕Java字符串操作展开了讨论,介绍了字符串的创建和初始化、基本操作、比较、拆分和连接、格式化以及不可变性等内容。字符串在Java中是一个重要的数据类型,对于处理文本数据非常有用。了解和掌握字符串的操作方法,将有助于编写出更加灵活、功能强大的Java程序。希望本篇博客能够帮助您深入理解和应用Java字符串操作,并在实际的开发中发挥作用。祝您编程愉快!

繁依Fanyi的博客 2380

银河麒麟V10SP1实战:5步搞定AD域登录(附Samba+Winbind配置详解)

本文提供银河麒麟V10 SP1操作系统无缝集成Windows AD域的实战指南。文章深入解析了Samba、Winbind与Kerberos三大核心组件的协作原理,并详细阐述了从环境准备、软件包安装、配置文件定制到执行加域及排错的全流程。特别针对2403等新版本提供了关键配置差异与避坑要点,旨在帮助企业运维人员实现高效、稳定的域环境登录与管理。

weixin_29269441的博客 297

Java字符串基本操作

字符串的基本操作简单易懂版

Lilip_的博客 5830

半导体行业周期分析:库存、需求与复苏路径深度解读

半导体行业作为现代科技产业的基石,其周期性波动受供需关系、库存水平和宏观经济等多重因素影响。从技术原理上看,行业景气度通常通过库存周转天数、晶圆厂产能利用率等核心指标进行监测,这些指标反映了产业链各环节的健康状况。在工程实践中,理解这些指标有助于企业进行库存管理和产能规划,从而提升运营效率。当前,半导体市场正经历结构性分化,其中**库存周转天数**和**晶圆厂产能利用率**成为判断市场拐点的关键。在应用场景上,汽车电子、人工智能等领域需求相对稳健,而消费电子则面临较大压力。本文聚焦于半导体行业的周期特征,探

weixin_29549793的博客 693

Java基础--------字符串操作

一. 字符串(String类) 字符是一种通用数据类型,是用单引号括起来的一个字符,如 'a'、'A'、'C'。而跟字符密切相关的通用数据类型是字符串。字符串常量是用双引号括起来的一串字符,如"你好"、"Hello World !\n"。在Java中,字符串常量是作为String类的一个特定的对象来处理的,而不是一个数据。 1.1 字符串的创建 package c...

詹煜彪9527 1万+

Android开发实战:5分钟搞定全屏沉浸式状态栏(附完整代码示例)

本文提供了Android开发中实现全屏沉浸式状态栏的完整实战指南。通过对比主题配置、动态代码设置和Window标志位三种方法,详细讲解了如何隐藏状态栏并处理布局适配。文章还涵盖了刘海屏、手势导航等高级适配场景,并附有可直接使用的工具类代码,帮助开发者快速提升应用视觉体验。

weixin_29197699的博客 360

【JAVA】字符串的操作的技巧

JAVA 字符串的操作技巧

也不一样的博客 1470

AIAgent知识表示与推理:基于本体论与规则引擎的实现

AIAgent知识表示与推理:基于本体论与规则引擎的实现 1. 背景介绍 人工智能(AI)系统的核心是知识表示和推理,这是实现智能行为的基础。在过去的几十年里,人工智能领域一直致力于研究如何有效地表示和推理知识,以支持智能系统的决策和行为。其中,基于本体论的知识表示和

AI天才研究院 1497

【SAP报错】BK128&K5112

在ECC中使用CO1F进行Progressive confirmation时,依次遇到了如下的报错。

weixin_45228526的博客 784

Java字符串操作

平常工作字符串优化技巧

qq_64272546的博客 1828

数据分析案例-汽车客户信息数据可视化分析

本数据集来源于kaggle,原始数据集共有8068条,11个特征变量,各变量含义解释如下:ID:客户IDGender:客户性别Ever_Married:客户婚姻状况Age:客户年龄Graduated:客户是毕业生吗?Profession:客户的职业Work_Experience:多年工作经验Spending_Score:客户的消费评分Family_Size:客户家庭成员人数(含客户)Var_1:客户的匿名类别Segmentation:(目标)客户的客户群。

m0_64336780的博客 1万+

Day24 学习总结

今天学的的内容为删除数据,行索引操作及pands中的部分函数。

qzfyj的博客 487

西门子S7-1200PLC控制步进电机的组态编程和具体步骤

西门子S7-1200PLC控制步进电机的组态编程和具体步骤 硬件准备: 1) 一个S7-1214C DC/DC/DC,订货号:6ES7 214-1AG40-0XB0 2) 一个86系的步进电机+相应的驱动器 3) 一个20A的西门子24V电源(步进驱动器及plc电源) 4) Portal V15版本 组态及编程: 1) 创建一个验证项目,添加cpu( S7-1214C),双击“工艺对象”,选择“运动控制”的TO_PositioningAxis V6.0版本,如下图所示: 2) “确定”后,系统自动生成名

Robot_PLC_HMI_Automation 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java中的常用类

Java中的基本类型我们应该都知道,例如,int、float、double、boolean、char 等。为了让基本类型也具有对象特性,Java为每个基本数据类型都提供了一个包装类,这样就可以像操作对象那样操作基本数据类型。包装类其实就是提供类型转换的方法。以Integer为例看一下。Integer包装类的构造方法:Integer(int value):创建一个Integer对象,表示指定的int值。

weixin_42098295的博客 1376

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Day13-JDK中的常用类

Day13总结JDK中的常用类随机数的生成ThreadLocalRandomUUIDMath.random()Random类时间相关类DateSimpleDateFormatCalender异常处理 总结 我是最棒的!基础不牢,地动山摇! JDK中的常用类 Math 数学相关的类,详细方法参见API BigInteger 比long精度还高,详细方法参加API BigDecimal 比double...

t384061961的博客 234

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

DAY24打卡

【代码】DAY24打卡。

weixin_71046789的博客 232

Python训练营打卡Day24

DAY 24 元组和OS模块知识点回顾:1.元组2.可迭代对象3.os模块作业:对自己电脑的不同文件夹利用今天学到的知识操作下,理解下os路径。

m0_70431145的博客 997

python学习DAY24打卡

os.walk会首先访问起始目录 (my_project),然后它会选择第一个子目录 (data) 并深入进去,访问 data 目录本身,然后继续深入它的子目录 (processed -> raw)。只有当 data 分支下的所有内容都被访问完毕后,它才会回到 my_project 这一层,去访问下一个子目录 (src),并对 src 分支重复深度优先的探索。它不是按层级(先访问所有第一层,再访问所有第二层)进行的,而是按分支深度进行的。这种策略被称之为深度优先。

m0_55265967的博客 834

打卡DAY24

知识点回顾:

2502_91755770的博客 239

Linux入门DAY24

Ansible任务控制实验摘要 本次实验通过Ansible playbook演示了任务控制功能,主要包括: 环境配置: 配置ansible.cfg指定远程用户、inventory文件和特权升级参数 设置inventory包含controller和4个node节点 循环任务实现: 简单循环:使用loop循环启动httpd和firewalld服务 散列循环:通过字典变量创建多个用户并设置不同组 循环关键字:展示了with_items的基本用法 实际应用: 部署web服务(httpd+firewalld) 创建测

m0_63492986的博客 489

Calendar类 Calendar.HOUR(12小时制) 和 Calendar.HOUR_OF_DAY(24小时制)

今天发现调度器设置成上午的时间执行,下午的时间不执行。 查看代码发现:Calendar.HOUR_OF_DAY (24小时)设置成 Calendar.HOUR (12小时)造成的。时间不对 int interval = 1; //间隔事件 int repeat = 0; //调度任务的执行次数 o代表循环 String time = ftpProperties.getExecTim

zhaotengfei36520的专栏 6万+

华清作业day24

1.

2301_78323287的博客 82

代码随想录Day24

给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。输入:prices = [7,1,5,3,6,4]输出:7解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。

penn的博客 561

day24 python训练营 day24

1、有序可重复2、组元中的元素不可修改,很多深度学习的内容不可修改,预先设定好3、组元主要是在功能上增加了不可修改这个内容。

2302_80971626的博客 440
上一篇: 【23】线程相关扩展习题
下一篇: 【Day25】常用类(日期时间设置)
「已注销」
博客等级 码龄4年 169粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

老板大气,I am happy

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值