重学java 30.API 1.String字符串

于是,虚度的光阴换来了模糊 

                                       —— 24.5.8

一、String基础知识以及创建

1.String介绍

1.概述

        String类代表字符串

2.特点

        a.Java程序中的所有字符串字面值(如“abc”)都作为此类的实例(对象)实现

                凡是带双引号的,都是String的对象

                String s = "abc"

                "abc"就是对象,String就是对象的数据类型,s就是对象名

        b.字符串是常量,它们的值在创建之后不能更改

                String s ="he11o"

                S += "world" —> 会产生新对象

        c.String 对象是不可变的,所以可以共享

                String s1 = "abc"

                String s2 = "abc"

package S57String;

public class Demo161String1 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1==s2); // 比较地址值 true
    }
}

2.String的实现原理

1.jdk8的时候:String底层是一个被final修饰的char数组-> private final char[] value;

2.jdk9开始到之后:底层是一个被final修饰的byte数组-> private final byte[] value;
        一个char类型占2个字节
        一个byte类型占1个字节 —> 省内存空间
字将串定义完之后,数组就创建好了,被final一修饰,数组的地址值直接定死

3.String的创建

1.String() —> 利用string的无参构造创建string对象
2.String(string original) —> 根据字符串创建string对象

3.String(char[] value) —> 根据char数组创建string对象

4.String(byte[] bytes) —> 通过使用平台的默认字符解码指定的 byte 数组,构造一个新的 string对象

        a、平台:操作系统

        b、操作系统默认字符集:GBK

                GBK:一个中文占2个字节

                UTF-8:一个中文占3个字节

                而且,中文对应的字节一般都是负数

                代码在idea中写的,idea启动的时候,会自动加一个启动参数,此启动参数为UTF-8
                -Dfile.encoding

5.简化形式:String 变量名 =" ”

package S57String;

public class Demo162String2Create {
    public static void main(String[] args) {
//        1.String() —> 利用string的无参构造创建string对象
        String s1 = new String();
        System.out.println("s1="+s1);
//        2.String(string original) —> 根据字符串创建string对象
        String s2 = new String("abc");
        System.out.println("s2="+s2);
//        3.String(char[] value) —> 根据char数组创建string对象
        char[] chars = {'a','b','c'};
        String s3 = new String(chars);
        System.out.println("s3="+s3);
//        4.String(byte[] bytes) —> 通过使用平台的默认字符解码指定的 byte 数组,构造一个新的 string对象
        byte[] bytes1 = {97,98,99};
        String s4 = new String(bytes1);
        System.out.println("s4="+s4);
//        三个负数代表中文,在ASCII表中找不到,所以无法正常显示
        byte[] bytes2 = {-97,-98,-99};
        String s5 = new String(bytes2);
        System.out.println("s5="+s5);

        byte[] bytes3 = {-28,-67,-96};
        String s6 = new String(bytes3);
        System.out.println("s6="+s6);
//        5.简化形式:String 变量名 =" ”
        String s7 = "abc";
        System.out.println("s7="+s7);
    }
}

1.string(char[] value,int offset,int count) —> 将char数组的一部分转成string对象

        value:要转String的char数组

        offset:从数组的哪个索引开始转
        count:转多少个
2.string(byte[]bytes,int offset,int length) —> 将byte数组的一部分转成String对象

        bytes:要转String的byte数组

        offset:从数组的哪个索引开始转

        length:转多少个

    public static void main(String[] args) {
        /*
        1.string(char[] value,int offset,int count) —> 将char数组的一部分转成string对象
            alue:要转String的char数组
            offset:从数组的哪个索引开始转
            count:转多少个
         */
         char[] chars = {'a','b','c','d','e','f'};
         String s1 = new String(chars,1,5);
         // 从索引1开始转5个
         System.out.println("s1="+s1);
        /*
        2.string(byte[]bytes,int offset,int length) —> 将byte数组的一部分转成String对象
            bytes:要转String的byte数组
            offset:从数组的哪个索引开始转
            length:转多少个
         */
        byte[] bytes = {97,98,99,100,101};
        String s2 = new String(bytes,0,4);
        System.out.println(s2);
    }

笔试题

题1

s1与s2地址值一样,s3内容是s1共享过来,但是s3是new出来的,会自己创造新的空间,所以会有新的空间

问1:Strings=new String("abc")共有几个对象?

        2个,一个new本身,一个是"abc”

问2:Strings= new String("abc")共创建了几个对象?

        1个或者2个,就看abc有没有提前创建出来了

        如果之前没有提前创建abc,那么就会创建2个,先创建abc,再new
        如果之前提前创建了abc了,那么String s = new String("abc"),就只创建了一个,因为abc不用单独再创建了,直接共享过来即可
                String s1 = "abc"
                String s2 = new String("abc")

题2

总结

1.字符串拼接,如果等号右边是字符串字面值拼接,不会产生新对象

2.字符串拼接,如果等号右边有变量参数拼接,产生新字符串对象

二、String常用方法

1.判断方法

        boolean equals(String s) —> 比较字符串内容
        boolean equalsIgnoreCase(String s) —> 比较字符串内容,忽略大小写

示例

    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = new String("abc");
        String s3 = "Abc";
        System.out.println(s1==s2); // 比较地址值 false
        System.out.println(s1.equals(s2));// 比较内容 true
        System.out.println(s3.equals(s1));// 比较内容 不忽略大小写 false
        System.out.println(s3.equalsIgnoreCase(s1));// 比较内容 忽略大小写 true
    }

练习

已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录成功与否,给出相应的提示步骤:
        ①先定义两个字符串,表示注册过的用户名和密码
        ②创建scanner对象,键盘录入用户名和密码
        ③比较,如果输入的用户名和密码跟已经注册过的用户名和密码内容一样,就登录成功,否则就登录失败

    public static void main(String[] args) {
//            ① 先定义两个字符串,表示注册过的用户名和密码
        String username = "root";
        String password = "954926928";
//            ② 创建scanner对象,键盘录入用户名和密码
        for (int i = 0; i < 3; i++) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请您输入用户名");
            String ans = sc.next();
//            ③ 比较,如果输入的用户名和密码跟已经注册过的用户名和密码内容一样,就登录成功,否则就登录失败
            if (ans.equals(username)) {
                System.out.println("请您输入用户密码");
                String que = sc.next();
                if (que.equals(password)) {
                    System.out.println("登陆成功!");
                    break;
                } else {
                    System.out.println("密码错误,请重新登录");
                }
            } else {
                System.out.println("没有找到用户,请先注册账户");
            }
        }
    }

确定的值.equals,这样可以防止空指针

Objects中的equals方法,自带防止空指针

        即使是两个指针都为null,也会判断成一样的

2.获取功能

         int length()->获取字符串长度

        String concat(Strings)->字符串拼接,返回新串儿

         char charAt(int index)-> 根据索引获取对应的字符

         int indexof(string s)->获取指定字符串在大字符串中第一次出现的索引位置

         String substring(int beginIndex)->截取字符串,从指定索引开始截取到最后,返回新串儿

         String substring(int beginIndex,int endIndex)->截取字符串,从beginIndex开始到endIndex结束,含头不含尾,返回新串儿

示例

    public static void main(String[] args) {
       // ① int length()->获取字符串长度
        System.out.println("一切都会好的".length());

        // ② String concat(Strings)->字符串拼接,返回新串儿
        String S1 = "一切都会好的";
        String S2 = "我一直相信";
        System.out.println(S1.concat(S2));

        // ③ char charAt(int index)-> 根据索引获取对应的字符
        System.out.println(S1.charAt(4));

        // ④ int indexof(string s)->获取指定字符串在大字符串中第一次出现的索引位置
        System.out.println(S1.concat(S2).indexOf("信"));

        // ⑤ String substring(int beginIndex)->截取字符串,从指定索引开始截取到最后,返回新串儿
        System.out.println(S1.concat(S2).substring(2));

        // ⑥ String substring(int beginIndex,int endIndex)->截取字符串,从beginIndex开始到endIndex结束,含头不含尾(括号左开右闭),返回新串儿
        System.out.println(S1.concat(S2).substring(3,6));

        System.out.println("——————————————————————————————————————");
        for (int i = 0; i < S1.concat(S2).length(); i++) {
            System.out.println(S1.concat(S2).charAt(i));
        }
    }

3.转换功能

        1.char[] tocharArray() —> 将字符串转成char数组
        2.byte[] getBytes() —> 将字符串转成byte数组
        3.String replace(CharSequence c1,CharSequence c2) —> 替换字符
                                  CharSequence —> String的接口
        4.byte[] getBytes(String charsetName) —> 按照指定的编码将字符串转成byte数组

示例:

    public static void main(String[] args) throws UnsupportedEncodingException {
        // 1.char[] tocharArray() —> 将字符串转成char数组
        String s = "abcdef";
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }

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

        // 2.byte[] getBytes() —> 将字符串转成byte数组
        byte[] bytes = s.getBytes();
        for (int i = 0; i < bytes.length; i++) {
            System.out.println(bytes[i]);
        }

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

        // 3.String replace(CharSequence c1,CharSequence c2) —> 替换字符 CharSequence —> String的接口
        System.out.println(s.replace("a","z"));
        System.out.println("————————————————————");

        // 4.byte[] getBytes(String charsetName) —> 按照指定的编码将字符串转成byte数组
        byte[] bytes1 = "一切都会好的".getBytes("utf-8");
        for (int i = 0; i < bytes1.length; i++) {
            System.out.println(bytes1[i]);
        }
    }

练习

键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)

        步骤:
                1.创建scanner对象,键盘录入
                2.定义三个变量,用来统计
                3.调用next方法录入一个字符串,遍历字符串,将每一个字符拿出来
                4.统计大写字母        

                        A-Z -> 65-90 
                        比如:B -> 66 -> 在65-90之间,证明就是大写字母
                5.统计小写字母
                        a-z -> 97-122
                        比如:b->98->在97-122之间,证明就是小写字母

                6.统计数字:

                        0-9 -> 48-57
                        比如:字符1->49->在48-57之间,证明就是数字

                7.将统计结果打印出来

package S57String;

import java.util.Scanner;

public class Demo168String8Practice {
    public static void main(String[] args) {
//        1.创建scanner对象,键盘录入
        Scanner sc = new Scanner(System.in);
//        2.定义三个变量,用来统计
        int big = 0;
        int small = 0;
        int number = 0;
//        3.调用next方法录入一个字符串,遍历字符串,将每一个字符拿出来
        String data = sc.next();
        char[] chars = data.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char num = chars[i];

//        4.统计大写字母
//        A-Z -> 65-90
//        比如:B->66->在65-90之间,证明就是大写字母
            if (num >= 'A' && num <= 'Z') {
                big++;
            }
//        5.统计小写字母
//        a-z-> 97-122
//        比如:b->98->在97-122之间,证明就是小写字母
            if (num >= 'a' && num <= 'z') {
                small++;
            }
//        6.统计数字:
//        0-9 -> 48-57
//        比如:字符1T>49 ->在48-57之间,证明就是数字
            if (num >= '0' && num <= '9') {
                number++;
            }
        }
//        7.将统计结果打印出来
            System.out.println("大写有:"+big);
            System.out.println("小写有:"+small);
            System.out.println("数字有:"+number);
    }
}

4.分割功能

1.String[] split(String regex) —> 按照指定的规则分割字符串

注意:regex写的是正则表达式->,在正则表达式中代表任意一个字符

示例:

public class Demo169String9Cut {
    public static void main(String[] args) {
        String s = "abc,txt";
        // 按照逗号进行分割
        String[] split = s.split(",");
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }
    }

按照.切割切不出来,需要用\\转义

其他功能

1.boolean contains(string s) —> 判断老串儿中是否包含指定的串儿

2.boolean endsWith(string s) —> 判断老串儿是否以指定的串儿结尾

3.boolean startsWith(string s) —> 判断老串儿是否以指定的串儿开头

4.string toLowerCase() —> 将字母转成小写

5.string toUpperCase() —> 将字母转成大写

6.string trim() —> 去掉字符串两端空格

示例:


public static void main(String[] args) {
    String s = "abcdefg";
//        1.boolean contains(string s) —> 判断老串儿中是否包含指定的串儿
    System.out.println(s.contains("def"));
//        2.boolean endsWith(string s) —> 判断老串儿是否以指定的串儿结尾
    System.out.println(s.endsWith("fg"));
//        3.boolean startsWith(string s) —> 判断老串儿是否以指定的串儿开头
    System.out.println(s.startsWith("abcd"));
//        4.string toLowerCase() —> 将字母转成小写
    System.out.println(s.toLowerCase());
//        5.string toUpperCase() —> 将字母转成大写
    System.out.println(s.toLowerCase().toUpperCase());
//        6.string trim() —> 去掉字符串两端空格,去不掉中间空格
        s = " 一切都会好的 ";
    System.out.println(s.trim());
//        7.去掉所有空格 replace将空格进行替换
    System.out.println("一起都会好的 我一直相信".replace(" ",""));
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】类加载机制及双亲委派模型

目录 一、类加载过程 1. 加载 2. 连接 a. 验证 b. 准备 c. 解析 3. 初始化 二、双亲委派模型 类加载器 双亲委派模型的工作过程 双亲委派模型的优点 一、类加载过程 JVM的类加载机制是JVM在运行时&#xff0c;将 .class 文件加载到内存中并转换为Java类的过程。它…

第8篇:创建Nios II工程之读取Switch的值<一>

Q&#xff1a;本期我们再添加一个PIO组件设为输入&#xff0c;创建Nios II工程读取输入值显示在LED上。 A&#xff1a;在前2期创建的控制LED工程的Platform Designer系统基础上再添加一个PIO核&#xff0c;参数设置为18位和单向输入模式&#xff0c;表示DE2-115开发板上的18个…

rmallox勒索病毒肆虐,如何保护网络安全?

rmallox勒索病毒与网络安全的关系可以从以下几个方面来阐述&#xff1a; 一、rmallox勒索病毒的特性 rmallox勒索病毒是一种极具破坏性的计算机病毒&#xff0c;它具有多个显著特性&#xff0c;这些特性使得该病毒对网络安全构成了严重威胁。具体来说&#xff0c;rmallox病毒具…

六西格玛项目的核心要素:理论学习、实践应用与项目经验

许多朋友担心&#xff0c;没有项目经验是否就意味着无法考取六西格玛证书。针对这一疑问&#xff0c;张驰咨询为大家详细解答。 首先&#xff0c;需要明确的是&#xff0c;六西格玛项目不仅仅是一种管理工具或方法&#xff0c;更是一种追求卓越、持续改进的思维方式。它强调通…

Java反序列化-CC11链

前言 这条链子的主要作用是为了可以在 Commons-Collections 3.2.1 版本中使用&#xff0c;而且还是无数组的方法。这条链子适用于 Shiro550漏洞 CC11链子流程 CC2 CC6的结合体 CC2 这是CC2的流程图&#xff0c;我们取的是后面那三个链子&#xff0c;但是由于CC2 只能在 c…

2024年第九届数维杯数学建模A题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

76.网络游戏逆向分析与漏洞攻防-移动系统分析-分析角色移动产生的数据包

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

[开发|安卓] Android Studio 开发环境配置

Android Studio下载 Android Studio下载地址 下载SDK依赖 1.点击左上角菜单 2.选择工具 3.打开SDK管理中心 4.下载项目目标Android版本的SDK 配置安卓虚拟机 1.打开右上角的设备管理 2.选择合适的手机规格 3.下载并选择项目目标Android系统 4.点击完成配置 …

jupyter lab 与jupter notebook 以及anconda环境

jupyter lab 与jupter notebook 以及anconda环境 jupyter lab 与jupter notebook 以及anconda环境方法一之后需要将虚拟环境的包&#xff0c;导入到jupyter lab中方法二 jupyter lab 与jupter notebook 以及anconda环境 #踩坑/深度学习/jupyter&#xff0c;与深度学环境 关于…

python 打包为exe可执行程序

近期因为需要做文字识别&#xff0c;应用ocr 所以每次都需要部署环境&#xff0c;然后打算做成exe&#xff0c;遇到问题做一总结。 pyinstaller -D --hidden-importpaddleocr testflask.py 生成exe paddleocr 和pyinstaller 安装不做说明。 No such file or directory: …

element-plus el-cascader 懒加载实现-省市区街道选择及回显

大概思路&#xff1a; 准备一个接口可以通过父Id,查询到下一级省市区街道的信息&#xff1b;如下方的getRegionListOne确定后端的数据结构&#xff0c;需要在created里边处理数据回显逻辑el-cascader接收的数据格式是[‘’,‘’,‘’];后端的数据格式多为[{provinceId: ‘’, …

Hive Bucketed Tables 分桶表

Hive Bucketed Tables 分桶表 1.分桶表概念 2.分桶规则 3.语法 4.分桶表的创建 5.分桶表的好处

鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位

时间概念太重要了&#xff0c;在鸿蒙内核又是如何管理和使用时间的呢? 时间管理以系统时钟 g_sysClock 为基础&#xff0c;给应用程序提供所有和时间有关的服务。 用户以秒、毫秒为单位计时.操作系统以Tick为单位计时&#xff0c;这个认识很重要. 每秒的tick大小很大程度上决…

set-cookie字段,cookie文件介绍+原理,如何查看cookie文件,在基于http协议服务器的代码实现,cookie存在问题+解决(会话机制)

目录 Set-Cookie 引入 介绍 原理 描述 图解 保存"cookie文件"的方法 内存级 文件级 查看cookie文件 示例 实现 介绍 代码 核心代码 全部代码 示例 cookie存在的问题 介绍 存在的必要性 如何解决 问题梳理 引入 会话机制 -- 解决信息泄漏…

构造照亮世界——快速沃尔什变换 (FWT)

博客园 我的博客 快速沃尔什变换解决的卷积问题 快速沃尔什变换&#xff08;FWT&#xff09;是解决这样一类卷积问题&#xff1a; ci∑ij⊙kajbkc_i\sum_{ij\odot k}a_jb_k ci​ij⊙k∑​aj​bk​其中&#xff0c;⊙\odot⊙ 是位运算的一种。举个例子&#xff0c;给定数列 a,…

【大模型】LLaMA-1 模型介绍

文章目录 一、背景介绍二、模型介绍2.1 模型结构2.2 模型超参数2.3 SwiGLU 三、代码分析3.1 模型结构代码3.2 FairScale库介绍 四、LLaMA家族模型4.1 Alpaca4.2 Vicuna4.3 Koala(考拉)4.4 Baize (白泽)4.5 Luotuo (骆驼&#xff0c;Chinese)4.6 其他 参考资料 LLaMA&#xff08…

pynq7020系列的资源有多少

pynq系列的资源有多少 对比 查找表107&#xff0c;273 39.14 140&#xff0c;537 51.28查找表随机存储器17&#xff0c;457 12.12 19&#xff0c;524 13.56触发器67&#xff0c;278 12.27 81&#xff0c;453 14.95 Block RAMs ( 36 KB ) 264.5 29.00 457 50.11 Table 1: Zynq-…

从简单逻辑到复杂计算:感知机的进化与其在现代深度学习和人工智能中的应用(下)

文章目录 第一章&#xff1a;感知机的局限性1.1 异或门的挑战1.2 线性与非线性问题 第二章&#xff1a;多层感知机2.1 已有门电路的组合2.2 实现异或门 第三章&#xff1a;从与非门到计算机 文章文上下两节 从简单逻辑到复杂计算&#xff1a;感知机的进化与其在现代深度学习和人…

The provided password or token is incorrect or your account

IDEA使用git技巧 【/n】 01 问题出现场景 我的gitlab上个月生成的token到期了,于是今天推上去的时候报了这个错误 The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token instead of a password. See ht…

Unreal游戏GPU参数详解,游戏性能优化再升级

UWA GOT Online For Unreal GPU模式近期全新发布&#xff0c;方便开发者从渲染和带宽的角度进行GPU分析。同时&#xff0c;此次更新中UWA也增加了丰富的GPU参数&#xff0c;涵盖了GPU SoC和GPU Counter模块。这些新增的参数不仅能够帮助Unreal开发者从宏观层面监控GPU的压力状况…
最新文章