Java String基础学习

目录

1、String的构造方法

2、String内存模型

3、字符串的比较

4、字符串的练习

1、用户登录系统

2、遍历字符串

3、统计字符次数

4、拼接字符串

5、字符串的反转

6、金额转换

7、手机号屏蔽 *

8、身份证信息查看

9、敏感词替换

5、StringBuilder

1、概念及练习

2、链式编程思想

3、小练习

6、StringJoiner

1、概念

7、总结



1、String的构造方法


public class StringTest {
    public static void main(String[] args) {
        //1、使用直接赋值的方式获取到一个字符串对象
        String s1 = "我";
        String s2 = "晓";
        String s3 = s1 + s2 ;
        System.out.println(s3 + "!");

        //2、使用new的方式来获取一个字符串的对象
        //空参构造:获取一个空白的字符串对象
        String S1 = new String();
        System.out.println("@" + S1 + "!");

        //3、有参构造
        //p:传递一个字符串,根据传递的字符串再创建一个新的字符串对象!
        String S2 = new String("xh");
        System.out.println(S2);

        //传递一个字符串数组。根据字符数组的内容在创建一个新的字符串对象
        //需求:我想修改字符串的内容。abc ——> qbc
        //abc --> {'a','b','c'} --> {'q','b','c'} --> qbc
        char[] c1 = {'a','b','c'};
        String C1 = new String(c1);
        System.out.println(C1);

        //传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象
        //应用场景:在网路传输中的数据都是字节信息。
        //一般把字节信息进行转换,转换成字符。而此时就会用到这个构造。
        byte[] b1 = {97,98,99,100};  //把这些数字转换成ascii码值,再进行拼接。
        String B1 = new String(b1);
        System.out.println(B1);
    }
}

2、String内存模型




3、字符串的比较


public class StringDemo {
    public static void main(String[] args) {
        //1、创建两个字符串对象
        String s1 = "abc";
        String s2 = new String("Abc");

        //2、==号的比较
        //如果是基本数据类型,比的是数据值
        //如果是引用数据类型,比的就是地址值
        System.out.println(s1 == s2); //false

        //3、比较字符串对象的内容是否相等
        Boolean result1 = s1.equals(s2);  //equals比较的对象要完全一样。
        System.out.println(result1);  //false

        //4、比较字符串对象的内容是否相等,忽略大小写。
        //1 一  这不行  只涉及英文
        Boolean result2 = s1.equalsIgnoreCase(s2);
        System.out.println(result2); //true
    }
}


4、字符串的练习


1、用户登录系统
import java.util.Scanner;

public class StringDemo3 {
    public static void main(String[] args) {
        //读题拆解法

        //定义两个变量记录正确的用户名和密码
        String rightUsername = "晓红";
        String rightPassword = "521";

        //键盘录入
        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();

            //比较
            int count = 3;
            if (username.equals(rightUsername) && password.equals(rightPassword)) {
                System.out.println("用户登录成功!");
                break;
            } else {
                if (i == 2){
                    //tips 提示最后一次机会!
                    System.out.println("账号" + username + "被锁定,请联系汝祥来解锁!");
                }else{
                    System.out.println("用户登录失败,用户名或密码错误!您还剩下" + (2 - i) + "次机会!");
                }
            }

        }

    }
}


2、遍历字符串
import java.util.Scanner;

public class StringDemo4 {
    public static void main(String[] args) {
        //键盘录入字符串
        Scanner sc = new Scanner(System.in);
        //tips
        System.out.println("请输入一个字符串");
        String s1 = sc.next();

        //遍历
        for (int i = 0; i < s1.length(); i++) {
            // i 依次表示字符串的每一个索引
            char c = s1.charAt(i);
            //charAt是一个字符串类(String)的方法;
            //用于获取指定位置的字符。它接受一个参数,该参数表示要从字符串中获取字符的索引位置。
            //索引从0开始,表示字符串中的第一个字符。通过使用charAt方法,您可以检索到字符串中任何位置的特定字符。
            //例如:
            //String str = "Hello, World!";
            //char ch = str.charAt(7);
            //System.out.println(ch);
            
            System.out.println(c);
        }
    }
}


3、统计字符次数
import java.util.Scanner;

public class StringDemo5 {
    public static void main(String[] args) {
        //1、键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str = sc.next();

        //2、统计
        //定义三个计数器
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;
        for (int i = 0; i < str.length(); i++) {
            // i 依次表示字符串中每一个索引
            char c = str.charAt(i);
            if(c >= 'a' && c < 'z'){
                //char类型的变量在参与计算的时候自动提升为int,查询ascii码表。
                smallCount++;
            }else if(c >= 'A' && c <= 'Z'){
                bigCount++;
            }else if(c >= '0' && c <= '9'){
                numberCount++;
            }
        }
        //输出打印
        System.out.println("小写字母有" + smallCount + "个");
        System.out.println("大写字母有" + bigCount + "个");
        System.out.println("数字符号有" + numberCount + "个");
    }
}


4、拼接字符串
public class StringDemo6 {
    public static void main(String[] args) {
        //我要干嘛? -- 遍历数组,并把数组拼接成字符串
        //我干这件事需要什么才能完成?  -- 数组
        //我干完了是否要把结返回调用处。-- 返回一个拼接的字符串
        //如果返回了,是否继续使用
        //如果不使用,那么可以返回也可以不返回。

        int[] arr = {1, 2, 3};
        String str = arrToString(arr);
        System.out.println(str);
    }

    public static String arrToString(int[] arr) {
        if (arr == null) {
            return "";
        }
        if (arr.length == 0) {
            return "[]";
        }
        //当代码执行到这表示什么?
        //表示数组不是null,长度也不为0

        String result = "[";
        for (int i = 0; i < arr.length; i++) {
            //i 索引  arr[i] 元素
            if (i == arr.length - 1) {
                result = result + arr[i];
            } else {
                result = result + arr[i] + ", ";
            }
        }
        result = result + "]";
        return result;
    }
}


5、字符串的反转
import java.util.Scanner;

public class StringDemo7 {
    public static void main(String[] args) {
        //键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str = sc.next();

        //调用
        String s1 = reverser(str);
        System.out.println(s1);
    }
    //我要干嘛?  -- 将字符串倒着
    //我干这件事需要什么? --索引数据。将数据重新赋值给变量
    //做完之后,是否需要返回
    //调用处是否需要继续使用方法的结果呢?

    public static String reverser(String str) {
        //abc --> cba

        String result = "";

        for (int i = str.length() - 1; i >= 0; i--) {
            //i 表示字符串中的每一个索引(倒着的)
            char c = str.charAt(i);
            result = result + c;
        }
        return result;
    }
}



6、金额转换
import java.util.Scanner;

public class StringDemo8 {
    public static void main(String[] args) {
        //1. 键盘录入金额
        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("金额无效!");
            }
        }
        //2. 定义一个变量来表示钱的大写
        String moneyStr = "";

        //3. 得到money里面的每一个数字
        while (true) {
            // 从右往左获取数字,因为右侧是数字的个位
            int ge = money % 10; // 取余,得到个位数

            //4. 调用方法将数字转换为大写的中文数字
            String n1 = getNumber(ge);
            // 将转换后的大写数字拼接到moneyStr的前面
            moneyStr = n1 + moneyStr;

            // 去掉刚才获取到的数字
            money = money / 10;
            // 如果数字上的每一个数字全部获取到了,那么money记录的就是0,此时循环就结束。
            if (money == 0) {
                break;
            }
        }

        //5. 在前面补零,补齐七位
        int count = 7 - moneyStr.length(); // 需要补零的个数
        for (int i = 0; i < count; i++) {
            moneyStr = "零" + moneyStr;
        }
        System.out.println(moneyStr);

        //6. 插入单位
        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 getNumber(int number) {
        // 定义数组,存储大写的中文数字
        String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        // 返回结果 
        return arr[number];
    }
}


7、手机号屏蔽 *


在Java中,可以使用 substring() 方法来截取字符串的子串。substring() 方法有两种重载形式,可以根据起始位置和结束位置或者只根据起始位置来截取子串。

public class StringDemo9 {
    public static void main(String[] args) {
        //1、获取一个手机号码
        String phoneNumber = "17682973508";

        //2、截取手机号的前面三
        String p1 = phoneNumber.substring(0,3);
        //System.out.println(p1);

        //3、截取手机号码后四位
        String p2 = phoneNumber.substring(7);//从第七位开始往后进行截取
        //System.out.println(p2);

        //4、拼接
        String result = p1 + "****" + p2;
        System.out.println(result);
    }
}


8、身份证信息查看
public class StringDemo10 {
    public static void main(String[] args) {
        //1、定义一个字符串用来记录身份证号码
        String id = "341623200306193750";

        //2、获取出生年月日
        String year = id.substring(6,10);
        String month = id.substring(10,12);
        String day = id.substring(12,14);

        //3、获取性别
        char gender = id.charAt(16); // '5'
        //利用ascii码表进行转换
        //gender会转换成ascii值 '5' -- 53  '0' -- 48
        int num = gender - 48;
        //System.out.println(num);

        //进行奇偶判断
        if (num % 2 == 0){
            System.out.println("性别为:女");
        }else{
            System.out.println("性别为:男");
        }

    }
}


9、敏感词替换
在Java中,你可以使用 replace() 方法来替换字符串中的特定字符或子串。这个方法接受两个参数:要替换的目标字符串和用于替换的新字符串。

public class StringDemo11 {
    public static void main(String[] args) {
        //1、获取到说的话。
        String talk = "你玩的真好,下次不要玩了,TMD,SB!";

        //2.1 定义一个敏感词库
        String[] arr = {"TMD","CNM","MLGB","SB","NM"};

        //2.2 循环得到数组中的每一个敏感词,依次进行替换。
        for (int i = 0; i < arr.length; i++) {
            talk = talk.replace(arr[i],"***");
        }
        //2.3 把话语中的TMD替换为***

        System.out.println(talk);
    }
}



java的学习需要很长时间的磨练。不能急于求成!

5、StringBuilder

1、概念及练习


public class StringBuilderDemo1 {
    public static void main(String[] args) {
        //1、创建对象
        StringBuilder sb = new StringBuilder("123");

        //2、添加元素
        //sb.append(1);
        //sb.append(1.2);
        //sb.append(true);

        //反转
        sb.reverse();

        //获取长度
        int l1 = sb.length();
        System.out.println(l1);

        //打印操作
        System.out.println(sb);

        //3、再把StringBuilder变回字符串
        String str = sb.toString();
        System.out.println(sb);
    }
}

2、链式编程思想
public class StringBuilderDemo1 {
    public static void main(String[] args) {
        //1、创建对象
        StringBuilder sb = new StringBuilder();

        //2、添加元素
        sb.append("aaa").append("bbb").append("ccc").append("ddd");
        //3、再把StringBuilder变回字符串
        String str = sb.toString();
        System.out.println(sb);
    }
}


3、小练习
对称字符串

import java.util.Scanner;

public class StringBuilderDemo2 {
    public static void main(String[] args) {
        //1、键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str = sc.next();

        //翻转键盘录入的内容
        //StringBuilder sb = new StringBuilder();
        //sb.append(str);
        //sb.reverse();
        //System.out.println(sb);

        //第二种方法 链式编程思想
        String result = new StringBuilder().append(str).reverse().toString();
        System.out.println(result);

        //比较
        if (str.equals(result)){ //拿str和result进行比较
            System.out.println("当前字符串是对称的!");
        }else {
            System.out.println("当前字符串是不对称的!");
        }
    }
}


拼接字符串

public class StringBuilderDemo3 {
    public static void main(String[] args) {
        //1、定义数组
        int[] arr = {1, 2, 3};

        //2、调用方法把数组变成字符串
        String STR = arrToString(arr);
        System.out.println(STR);
    }

    public static String arrToString(int[] arr) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");

        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append(arr[i]);
            } else {
                sb.append(arr[i]).append(", ");
            }
        }
        sb.append("]");

        return sb.toString();
    }
}


6、StringJoiner

1、概念




import java.util.StringJoiner;

public class StringJoinerDemo1 {
    public static void main(String[] args) {
        //1、创建一个对象,并指定中间的间隔符号。
        StringJoiner sj = new StringJoiner("---");

        //2、添加元素
        sj.add("aaa").add("bbb").add("ccc").add("ddd");

        //3、打印结果
        System.out.println(sj);//aaa---bbb---ccc---ddd
    }
}


7、总结



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

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

相关文章

新手也能看懂的【前端自动化测试入门】!

前言 最近在网上搜索前端自动化测试相关的文档&#xff0c;但是发现网上的文章都是偏使用&#xff0c;没有把一些基础概念说清楚&#xff0c;导致后续一口气遇到一些karma、Jasmine、jest、Mocha、Chai、BDD等词汇的时候很容易一头雾水&#xff0c;这次一方面整理一下收获的知…

YOLOv8改进 | 进阶实战篇 | 利用YOLOv8进行视频划定区域目标统计计数

一、本文介绍 Hello,各位读者,最近会给大家发一些进阶实战的讲解,如何利用YOLOv8现有的一些功能进行一些实战, 让我们不仅会改进YOLOv8,也能够利用YOLOv8去做一些简单的小工作,后面我也会将这些功能利用PyQt或者是pyside2做一些小的界面给大家使用。 在开始之前给大家推…

解决Spring Boot跨域问题(配置JAVA类)

什么是跨域问题 跨域问题指的是不同端口之间&#xff0c;使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制&#xff0c;它是为了保证用户的安全&#xff0c;防止恶意网站窃取数据。 比如前端用的端口号为8081&#xff0c;后端用的端口号为8080&#xff0c;后…

Linux下安装docker

1、查看系统版本 Docker支持64位版本的CentOS 7和CentOS 8及更高版本&#xff0c;它要求Linux内核版本不低于3.10。查看Linux版本的命令这里推荐两种&#xff1a;lsb_release -a或cat /etc/redhat-release。 显然&#xff0c;当前Linux系统为CentOS7。再查一下内核版本是否不低…

SpringBoot+dynamic-datasource实现多数据源(msyql、sqlserver、postgresql)手动切换

场景 SpringBootMybatisPlusdynamic-datasources实现连接Postgresql和mysql多数据源&#xff1a; SpringBootMybatisPlusdynamic-datasources实现连接Postgresql和mysql多数据源-CSDN博客 上面实现通过注解和配置文件的方式去进行多数据源操作。 如果业务需求&#xff0c;比…

Ubuntu安装最新版Docker和Docker-Compose

ubuntu环境搭建专栏&#x1f517;点击跳转 Ubuntu系统环境搭建&#xff08;十&#xff09;——Ubuntu安装最新版Docker和Docker Compose 文章目录 Ubuntu系统环境搭建&#xff08;十&#xff09;——Ubuntu安装最新版Docker和Docker Compose1.添加Docker库1.1 安装必要的证书并…

PostgreSQL命令大全

文章目录 连接与退出数据库操作表操作外键约束视图操作存储过程与函数权限管理事务管理查询优化与分析数据类型转换分区表操作复制与备份恢复 PostgreSQL是一个功能强大的开源关系型数据库管理系统&#xff0c;以下是一些基本且常用的命令按功能分类&#xff1a; 连接与退出 连…

【前端设计】流光按钮

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 css body{height: 100vh;display: flex;justify-content: center;align-items: center;background…

HarmonyOS鸿蒙学习基础篇 - 项目目录和文件介绍

├── hvigor //存储购置信息的文件&#xff0c;主要用于发布打包 ├── idea //开发工具相关配置可忽略 ├── AppScope //工程目录 全局公共资源存放路径 │ └── resources │ │ └── base │ │ │ └── element //常亮存放 │ │ │ …

Windows安装WSL2精简版教程

文章目录 一、安装WSL二、更改WSL的存放路径/备份WSL三、安装WSL Terminall四、WSL界面&#xff1a;xlaunch五、WSL1升级WSL2六、WSL2与VMware兼容问题七、更改手动导入的wsl的默认登录用户参考 一、安装WSL 步骤1 - 启用适用于 Linux 的 Windows 子系统&#xff1a; 需要先启…

格局打开!前端未死,只是要求变高了

本文笔者会从以下几个方面分享&#xff0c;希望能够帮助正在迷茫的前端小伙伴提供一点思路&#xff01; 逛技术博客 不局限框架 全栈工程师兴起 关注前沿 写技术文章 录制前端视频 总结 2024年了&#xff0c;没工作的找到工作了吗&#xff1f;有工作的加薪了吗&#xff1f;加薪…

UI设计中的插画运用优势(上)

1. 插画是设计的原创性和艺术性的基础 无论是印刷品、品牌设计还是UI界面&#xff0c;更加风格化的插画能够将不同的风格和创意加入其中&#xff0c;在激烈的竞争中更容易因此脱颖而出。留下用户才有转化。 2. 插画是视觉触发器&#xff0c;瞬间传达大量信息 我们常说「一图胜千…

Unity3D学习之Unity基础

文章目录 1. 第一部分&#xff1a;MONO中的重要内容2. 延时函数2.1 什么是延时函数2.2 延时函数的使用2.2.1 延时重复函数2.2.2 取消延迟函数2.2.3 判断是否有延迟函数开启2.2.4 延迟函数和依附对象的关系 3 协同程序3.1 Unity中的多线程3.2 协同程序3.3 协程的使用3.3.1 关闭协…

Jetson Orin Nano安装OpenCV带cuda加速版本的全过程

安装过程 使用jetpack安装的jetson&#xff0c;自带了opencv&#xff0c;但是没有cuda加速的&#xff0c;输入opencv_version 使用jtop查看&#xff0c;可以确认自带的opencv是没用cuda的 卸载opencv&#xff0c;先查看有哪些包 pip3 list | grep opencv opencv-python 然后卸…

从规则到神经网络:机器翻译技术的演化之路

文章目录 从规则到神经网络&#xff1a;机器翻译技术的演化之路一、概述1. 机器翻译的历史与发展2. 神经机器翻译的兴起3. 技术对现代社会的影响 二、机器翻译的核心技术1. 规则基础的机器翻译&#xff08;Rule-Based Machine Translation, RBMT&#xff09;2. 统计机器翻译&am…

文献分享四:(基础)Pyroelectric drift of integrated-optical LiNbO3 modulators

文献来源——S. M. Kostritskii, Yu. N. Korkishko, V. A. Fedorov & A. V. Yatsenko (2021) Pyroelectric drift of integrated-optical LiNbO3 modulators, Ferroelectrics, 574:1, 170-178, DOI: 10.1080/00150193.2021.1888062 本文分析了我们之所以需要偏置电路的原因…

力扣刷MySQL-第六弹(详细讲解)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

【Linux、C】服务程序的调度

这一节中用到的技术点有&#xff1a;信号、多进程、exec函数 exec函数族 exec的本质 exec是用参数中指定的程序替换了当前进程的正文段、数据段、堆和栈。 如果调用失败会继续运行当前进程 #include <stdio.h> #include <stdlib.h> #include <string.h> #in…

常用排序算法总结(直接插入排序、选择排序、冒泡排序、堆排序、快速排序、希尔排序、归并排序)

目录 一. 直接插入排序 二:选择排序 三:冒泡排序 四.堆排序 五:希尔排序 六:快速排序(递归与非递归) 七.归并排序(递归与非递归) 一. 直接插入排序 &#x1f31f;排序思路 直接插入排序的基本原理是将一条记录插入到已排好的有序表中&#xff0c;从而得到一个新的、记录…

PaddleNLP评论观点抽取和属性级情感分析

项目地址&#xff1a;PaddleNLP评论观点抽取和属性级情感分析 - 飞桨AI Studio星河社区 (baidu.com) 情感分析旨在对带有情感色彩的主观性文本进行分析、处理、归纳和推理&#xff0c;其广泛应用于消费决策、舆情分析、个性化推荐等领域&#xff0c;具有很高的商业价值。 依托…