String(字符串)

1、String概述

  • java.lang.String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都为此类的对象。

1.1、String的注意点

  • 字符串的内容是不会发生改变的,它的对象在创建后不能被更改。

1.2、总结

  1. String是Java定义好的一个类。定义在java.lang包中,所以使用的时候不需要导包。
  2. Java程序中的所有字符串文字都被实为此类的对象。
  3. 字符串不可变,它们的值在创建后不能被更改。

2、String构造方法代码实现和内存分析

2.1、创建String对象的两种方式

  1. 直接赋值                
    String          name        =        " 字符串 ";
    package stringdemo;
    
    public class StringDemo1 {
        public static void main(String[] args) {
            String s1 = "abc";
            System.out.println(s1);
        }
    }
    D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=21864:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
    abc
    
    Process finished with exit code 0
    
  2. new

构造方法说明
public         String()创建空白字符串,不含任何内容
public         String(String original)根据传入的字符串,创建字符串对象
public         String(char[ ]        chs)根据字符数组,创建字符串对象
public         String(byte[  ]       chs)根据字节数组,创建字符串对象
                                                                                                                                                                                                                                                            
package stringdemo;

public class StringDemo1 {
    public static void main(String[] args) {
        String s2 = new String();
        System.out.println("@" + s2 + "!");//@!

        String s3 = new String("abc");
        System.out.println(s3);//abc

//      应用场景:修改字符串的内容。abcd -->  Qbcd
        char[] chs = {'a', 'b', 'c', 'd'};
        String s4 = new String(chs);
        System.out.println(s4);//abcd

//      应用场景:以后在网络当中传输的数据其实都是字节信息
//      我们一般要把字节信息进行转换,转成字符串,此时就要用到这个构造了。
        byte[] bytes = {97, 98, 99, 100};
        String s5 = new String(bytes);
        System.out.println(s5);//abcd
    }
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=2016:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
@!
abc
abcd
abcd

Process finished with exit code 0

2.2、String内存分析,内存模型

2.2.1、直接赋值内存分析

  • 注意:StringTable(串池)在JDK7版本开始从方法区挪到了堆内存
  •  当使用双引号直接赋值时,系统会检查字符串在串池中是否存在。不存在:创建新的,存在:复用

2.2.2、手动new内存图解析

3、字符串的比较

                                                                             ==号比的到底是什么?
基本数据类型引用数据类型
基本数据类型比较的是数据值引用数据类型比较的是地址值

                                                                     字符串的比较
  • boolean  equals方法(要比较的字符串)
  • 完全一样结果才是true,否则为false
  • boolean equalsIgnoreCase(要比较的字符串)
  • 忽略大小写的比较
 
package stringdemo;

import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str1 = sc.next();//是new出来的
        String str2 = "abc";

        System.out.println(str1 == str2);//false
    }
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=4197:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
请输入一个字符串
abc
false

Process finished with exit code 0
  • 查看next();方法的源码发现键盘输入的字符串是new出来的。

4、练习-用户登录

  • 已知正确的用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示。
  • package stringdemo;
    
    import java.util.Scanner;
    
    public class StringDemo1 {
        public static void main(String[] args) {
            String rightUsername = "zhangsan";
            String rightPassword = "123456";
    
            Scanner sc = new Scanner(System.in);
            for (int i = 0; i < 3; i++) {
                System.out.println("请输入用户名");
                String username = sc.next();
                System.out.println("请输入密码");
                String password = sc.next();
    
                if (username.equals(rightUsername) && password.equals(rightPassword)) {
                    System.out.println("用户登录成功");
                    break;
                } else {
                    if (i == 2) {
                        System.out.println("账号" + username + "被锁定,请联系管理员客服:");
                    }
                    System.out.println("用户登录失败,用户名或密码有误,您还剩下" + (2 - i) + "次机会");
                }
            }
    
    
        }
    
    }
    D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=5568:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
    请输入用户名
    z
    请输入密码
    z
    用户登录失败,用户名或密码有误,您还剩下2次机会
    请输入用户名
    z
    请输入密码
    z
    用户登录失败,用户名或密码有误,您还剩下1次机会
    请输入用户名
    z
    请输入密码
    z
    账号z被锁定,请联系管理员客服:
    用户登录失败,用户名或密码有误,您还剩下0次机会
    z
    Process finished with exit code 0
    

5、练习-遍历字符串和统计字符个数

5.1、遍历字符串

  • 需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
  • public char chatAt(int index):
  • 根据索引返回字符
  • public int length():
  • 返回此字符串的长度
  • 数组的长度:
  • 数组.length
  • 字符串的长度:
  • 字符串对象.length()
package stringdemo;

import java.util.Scanner;

public class StringTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串");
        String next = sc.next();
        for (int i = 0; i < next.length(); i++) {
            char c = next.charAt(i);
            System.out.println(c);
        }
    }
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=31884:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
请输入字符串
abcd
a
b
c
d

Process finished with exit code 0

5.2、统计字符次数

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

import java.util.Scanner;

public class StringTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串");
        String next = sc.next();
        int capital = 0;
        int smallLetter = 0;
        int numberCount = 0;
        for (int i = 0; i < next.length(); i++) {
            char c = next.charAt(i);
            if (c >= 'A' && c <= 'Z') {
                capital++;
            }
            if (c >= 'a' && c <= 'z') {
                smallLetter++;
            }
            if (c >= 48 && c <= 57) {
                numberCount++;
            }
//            System.out.println(c);
        }
        System.out.println("大写字母有:" + capital + "个");
        System.out.println("小写字母有:" + smallLetter + "个");
        System.out.println("数字有:" + numberCount + "个");
    }
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=33003:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
请输入字符串
AZRTazqwer39473
大写字母有:4个
小写字母有:6个
数字有:5个

Process finished with exit code 0

6、练习-拼接字符串和反转

6.1、拼接字符串

  • 定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。
package stringdemo;

public class StringTest {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        String s = arrToString(arr);
        System.out.println(s);
    }

    public static String arrToString(int[] arr) {
        if (arr == null) {
            return "";
        }
        if (arr.length == 0) {
            return "[]";
        }
        String result = "[";
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                result = result + arr[i];
            } else {
                result = result + arr[i] + ", ";
            }
        }
        result = result + "]";
        return result;
    }
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=33811:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
[1, 2, 3]

Process finished with exit code 0

6.2、字符串反转

  • 定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果,例如,键盘录入abc,输出结果cba
package stringdemo;

import java.util.Scanner;

public class StringTest {
    public static void main(String[] args) {
        System.out.println(reverser());
    }

    public static String reverser() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串");
        String str = sc.next();
        String result = "";
        for (int length = str.length() - 1; length >= 0; length--) {
            char c = str.charAt(length);
            result = result + c;
        }
        return result;
    }
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=34637:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
请输入字符串
abc
cba

Process finished with exit code 0

7、较难练习-金额转换

package stringdemo;

import java.util.Scanner;

public class StringTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int money;
        while (true) {
            System.out.println("请输入一个金额");
            money = sc.nextInt();
            if (money >= 0 && money <= 9999999) {
                break;
            } else {
                System.out.println("金额无效");
            }
        }
        String moneyStr = "";
        while (true) {
            int ge = money % 10;
            String capitalNumber = getCapitalNumber(ge);
            moneyStr = capitalNumber + moneyStr;

            money = money / 10;

            if (money == 0) {
                break;
            }
        }
        int count = 7 - moneyStr.length();
        for (int i = 0; i < count; i++) {
            moneyStr = "零" + moneyStr;
        }
        System.out.println(moneyStr);

        String[] arr = {"佰", "拾", "万", "仟", "佰", "拾", "元"};
        String result = "";
        for (int i = 0; i < moneyStr.length(); i++) {
            char c = moneyStr.charAt(i);
            result = result + c + arr[i];
        }
        System.out.println(result);
    }

    public static String getCapitalNumber(int number) {
        String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        return arr[number];
    }

}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=2152:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
请输入一个金额
2135
零零零贰壹叁伍
零佰零拾零万贰仟壹佰叁拾伍元

Process finished with exit code 0

 8、练习-手机号屏蔽-身份证号码信息查看-游戏骂人敏感词替换

  • String substring (int beginIndex,int  endIndex)
  • 截取(注意点:包头不包尾,包左不包右,只有返回值才是截取的小串)
  • String substring(int  beginIndex)
  • 截取到末尾

8.1、手机号屏蔽

package stringdemo;

public class StringTest {
    public static void main(String[] args) {
        String phoneNumber = "13112349468";

        String start = phoneNumber.substring(0, 3);

        String end = phoneNumber.substring(7);

        String result = start + "****" + end;

        System.out.println(result);
    }
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=3056:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
131****9468

Process finished with exit code 0

8.2、身份证号码信息查看

package stringdemo;

public class StringTest {
    public static void main(String[] args) {
        String id = "321281202308131234";

        String year = id.substring(6, 10);
        String month = id.substring(10, 12);
        String day = id.substring(12, 14);

        System.out.println("人物信息为:");
        System.out.println("出生年月日:" + year + "年" + month + "月" + day + "日");

        char gender = id.charAt(16);
        //利用ASCII码表
        //'0'   -->   48       48-48=0
        //'1'   -->   49       49-48=1
        //'2'   -->   50       50-48=2
        //'3'   -->   51       51-48=3
        //'4'   -->   52       52-48=4
        //'5'   -->   53       53-48=5
        //'6'   -->   54       54-48=6
        //'7'   -->   55       55-48=7
        //'8'   -->   56       56-48=8
        //'9'   -->   57       57-48=9

        int num = gender - 48;
        if (num % 2 == 0) {
            System.out.println("性别为:女");
        } else {
            System.out.println("性别为:男");
        }
    }

}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=2804:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
人物信息为:
出生年月日:2023年08月13日
性别为:男

Process finished with exit code 0

8.3、敏感词替换

  • String replace(旧值,新值)
  • 注意点:只有返回值才是替换之后的结果
package stringdemo;

public class StringTest {
    public static void main(String[] args) {
        String talk = "你玩的真好,SB以后不要再玩了,TMD";

        String[] arr = {"TMD", "CMD", "SB", "MLGB"};

        for (int i = 0; i < arr.length; i++) {

            talk = talk.replace(arr[i], "***");
        }
        System.out.println(talk);
    }

}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=3940:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
你玩的真好,***以后不要再玩了,***

Process finished with exit code 0

   

​​​

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

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

相关文章

【计算机组成原理】24王道考研笔记——第四章 指令系统

第四章 指令系统 一、指令系统 指令是指示计算机执行某种操作的命令&#xff0c;是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该 机的指令系统&#xff0c;也称为指令集。 指令格式&#xff1a; 1.1分类 按地址码数目分类&#xff1a; 按指令长度分类&…

c#在设计时调试自定义 Windows 窗体控件

private string demoStringValue null; [Browsable(true)] public string DemoString {get{return this.demoStringValue;}set{demoStringValue value;} } 参考链接 在设计时调试自定义控件 - Windows Forms .NET Framework | Microsoft Learnhttps://learn.microsoft.com/z…

小游戏扫雷实现教学(详解)

目录 【前言】 一、模块化程序设计&#xff08;多文件编程&#xff09;介绍 1.概述 2.传统编程的方式 3.模块化程序设计的方法 二、扫雷代码设计思路 三、扫雷代码设计 1.创建菜单函数 2.实现9x9扫雷 3.初始化棋盘 4.打印棋盘 5.随机布置雷的位置 6.排查雷的信息 7.回…

AI绘画网站都有哪些比较好用?

人工智能绘画网站是一种利用人工智能技术进行图像处理和创作的网站。这些绘画网站通常可以帮助艺术家以人工智能绘画的形式快速生成有趣、美丽和独特的绘画作品。无论你是专业的艺术家还是对人工智能绘画感兴趣的普通人&#xff0c;人工智能绘画网站都可以为你提供新的创作灵感…

机器学习笔记:李宏毅chatgpt 大模型 大资料

1 大模型 1.1 大模型的顿悟时刻 Emergent Abilities of Large Language Models&#xff0c;Transactions on Machine Learning Research 2022 模型的效果不是随着模型参数量变多而慢慢变好&#xff0c;而是在某一个瞬间&#xff0c;模型“顿悟”了 这边举的一个例子是&#…

21、stm32使用LTDC驱动LCD

注&#xff1a;本文基于stm32使用FMC驱动SDRAM(IS42S32800G-6BLI)工程继续开发 本例使用安富莱的H743XIH板子驱动LTDC点亮7寸LCD 硬件接线&#xff1a;RGB888 一、cubemx配置 1、LTDC配置 注意此引脚应于上面的硬件接线图一致 2、配置DMA2D 3、背光引脚和触摸引脚 4、时钟…

网络:路由

1. 路由器 路由器工作在三层&#xff0c;每个接口都处于不用的网段中&#xff0c;即不同的广播域。但大多情况下&#xff0c;两台路由器直接相连的接口是同一个广播域&#xff0c;即一个网段。 路由器具有判断网络地址和选择路径的功能&#xff0c;能在多网络互联的环境中&…

聚类与回归

聚类 聚类属于非监督式学习&#xff08;无监督学习&#xff09;&#xff0c;往往不知道因变量。 通过观察学习&#xff0c;将数据分割成多个簇。 回归 回归属于监督式学习&#xff08;有监督学习&#xff09;&#xff0c;知道因变量。 通过有标签样本的学习分类器 聚类和…

R语言APSIM模型高级应用及批量模拟

随着数字农业和智慧农业的发展&#xff0c;基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…

第一次PR经历

第一次PR测试地址&#xff1a;https://github.com/firstcontributions/first-contributions说明文档&#xff1a; https://github.com/firstcontributions/first-contributions/blob/main/translations/README.zh-cn.md

无涯教程-Perl - readpipe函数

描述 该函数将EXPR作为命令执行。然后,将输出作为标量文本中的多行字符串返回,或者将行作为列表context中的单个元素返回。 语法 以下是此函数的简单语法- readpipe EXPR返回值 此函数在标量context中返回String,在列表context中返回List。 例 以下是显示其基本用法的示…

python_面向对象基础_数据分析

主要目的 对于文本格式和JSON格式数据进行分析&#xff0c;将其中数据提炼出来绘制折线图。 主要实现步骤 1.设计一个完成对数据的封装 2.设计一个抽象类,定义数据读取相关功能,使用其子类实现具体功能 3.读取文件,生成数据对象 4.进行数据计算 5.绘制图表 定义数据封装类 &…

为什么金鸣识别不做成离线版?

来百度APP畅享高清图片 在众多的用户咨询中&#xff0c;金鸣识别客服常常会被用户问及为何不做成离线版的问题&#xff0c;下面我就在这里跟大伙说说其中的原因吧。 离线版的OCR准确率相对于网络版可能会较低&#xff0c;主要有以下几个原因&#xff1a; 1. 数据量和模型更新…

2023国赛数学建模B题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

【Spring Cloud +Vue+UniApp】智慧建筑工地平台源码

智慧工地源码 、智慧工地云平台源码、 智慧建筑源码支持私有化部署&#xff0c;提供SaaS硬件设备运维全套服务。 前言&#xff1a;互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&#xff0c;从施工现场源头抓起&#xff0c;最大程度的收集人员、安全、环境、材…

c++ static

static 成员 声明为static的类成员称为类的静态成员&#xff0c;用static修饰的成员变量&#xff0c;称之为静态成员变量&#xff1b;用 static修饰的成员函数&#xff0c;称之为静态成员函数。静态成员变量一定要在类外进行初始化。 看看下面代码体会一下: //其他类 class …

数据结构---跳表

目录标题 为什么会有跳表跳表的原理跳表的模拟实现准备工作find函数insert函数erase函数 测试效率比较 为什么会有跳表 在前面的学习过程中我们学习过链表这个容器&#xff0c;这个容器在头部和尾部插入数据的时间复杂度为O(1)&#xff0c;但是该容器存在一个缺陷就是不管数据…

opencv 基础50-图像轮廓学习03-Hu矩函数介绍及示例-cv2.HuMoments()

什么是Hu 矩&#xff1f; Hu 矩&#xff08;Hu Moments&#xff09;是由计算机视觉领域的科学家Ming-Kuei Hu于1962年提出的一种图像特征描述方法。这些矩是用于描述图像形状和几何特征的不变特征&#xff0c;具有平移、旋转和尺度不变性&#xff0c;适用于图像识别、匹配和形状…

如何在 .NET Core WebApi 中处理 MultipartFormDataContent 中的文件

问题描述# 上图示例展示了用户通过 IOS 客户端发送请求时&#xff0c;对应后端接口接收到的 Request 内容。从请求内容的整体结果&#xff0c;我们可以看出这是一个 multipart/form-data 的数据格式&#xff0c;由于这种数据是由多个 multipart section 组成&#xff0c;所以我…