字符串类型

news2024/12/23 7:44:58

目录

一、字符与字符串

二、字符串对象与自变量

三、正则表达式

1.普通字符

2.特殊字符

3.非打印字符

4.限定符

5.定位符

四、正则表达式的处理

1.Pattern.compile(String regex)

2.Matcher.matches()

3.Matcher.find()

4.Matcher.replaceAll(String replacement)

五、字符串的连接

六、字符串的比较

七、字符串的长度


一、字符与字符串

字符类型(char)是Java中的基本数据类型之一,字符是用单引号引起来的单个字符。字符串是用双引号引起来的任意个字符,字符串就是字符组成的序列。

package characterString;

import java.util.Random;

public class Password {
    public static void main(String[] args) {
        /*
        随机生成一个6位密码,要求:
        不包含重复字符
        要有字母和数字
        不能以数字开头
         */

            String pass = rand(6);
            System.out.println(pass);

    }
    public static String rand(int length) {
        String characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        String[] arr = characters.split("");

        Random random = new Random();
        // 第一个是字母
        int index = random.nextInt(52);
        StringBuilder sb = new StringBuilder(arr[index]);

        boolean hasNum = false; // 是否有数字
        for (int i = 1; i < length; ) {
            // 随机字符下标
            index = random.nextInt(arr.length);
            // 判断在字符串中有没有
            if (sb.indexOf(arr[index]) == -1) {
                if (index >= 52 ){
                    hasNum = true;
                }
                sb.append(arr[index]);
                i++;
            }
        }

//        String reg = "^[a-zA-Z]+\\d+\\w*$";
        String str = sb.toString();

        if (!hasNum){
            // 说明没数字
            int num = random.nextInt(10);
            int repIndex = random.nextInt(1,length) ;
            str = str.replaceFirst(str.charAt(repIndex) + "", String.valueOf(num));
        }
        return str;
    }
}

二、字符串对象与自变量

字符串的声明有两种形式:

String 变量名="初始值";

String 变量名=new String("初始值");

第一种形式叫字面量,第二种使用new关键字声明的字符串叫做字符串对象。 

三、正则表达式

一种字符串处理的工具,用于查找、替换、匹配和提取文本中的模式。

正则表达式有一些特殊字符和普通字符组成,例如:\d{3}-\d{4}可以匹配“123-4567”的字符串,\d表示数字字符,{3}表示连续匹配3次,-表示匹配一个横线。

1.普通字符

[abc]匹配[]中的所有字符,例如[aeiou]匹配字符串“google runoob taobao”中所有的a e i o u字母
[^ABC]匹配除了[]中所有的字母,例如[^aeiou]匹配字符串“google runoob taobao”中除了a e i o u所有的字母
[^a-z]匹配除了[]以外的字符
[A-Z]表示一个区间,匹配所有大写字母,[a-z]表示所有小写字母
.匹配任意单个字符,但不包括换行符,相等于[^\n\r]

[\s\S]

匹配所有,\s是匹配所有空白符,包括换行,\S非空白符,不包括换行
\w匹配数字、字母、下划线,等价于[A-Za-z0-9]

2.特殊字符

要匹配特殊字符,必须首先使字符“转义”,即,将反斜杠字符\放在它们的前面。

$匹配输入字符串的结束位置。
()标记一个子表达式的开始和结束位置。要匹配这些字符,请使用\(和\)
*匹配前面的子表达式0次或多次。要匹配这些字符,请使用\*
+匹配前面的子表达式1次或多次。要匹配这些字符,请使用\+
.匹配除换行符之外的任意单字符。\.
[标记一个中括号表达式的开始。\[
?匹配前面的子表达式0次或1次。\?
\将下一个字符标记为特殊字符,或原义字符、或向后引用、或八进制转义符。
^匹配输入字符串的开始位置,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。\^
{标记限定符表达式的开始。\{
|指明两项之间的一个选择。\|

3.非打印字符

\cx匹配由x指明的控制字符。x的值必须是A-Z或a-z之一,否则将视作一个原义的'c'字符
\f匹配一个换页符。
\n匹配一个换行符
\r匹配一个回车符
\s匹配任何空白字符,包括空格、制表符、换页符等等
\S匹配任何非空白字符
\t匹配一个制表符
\v匹配一个垂直制表符

4.限定符

*匹配0个或多个字符a,例如ab*能匹配“a”以及“abb”。
+匹配前面的表达式1次或多次
匹配前面的表达式0次或1次
{n}n是一个非负整数,匹配确定的n次
{n,}n是一个非负整数,至少匹配n次
{n,m}m和n均为非负整数,n<=m,最少匹配n次且最多匹配m次

5.定位符

^匹配输入字符串开始的位置
$匹配输入字符串结尾的位置
\b匹配一个单词边界,即字与空格间的位置
\B非单词边界匹配

四、正则表达式的处理

1.Pattern.compile(String regex)

将正则表达式编译成一个Pattern对象,regex是一个字符串类型的正则表达式。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        String regex="\\d+";//匹配数字
        Pattern pattern=Pattern.compile(regex);
        String text="hello 123 world";
        Matcher matcher=pattern.matcher(text);
        while (matcher.find()){
            System.out.println(text+"匹配的结果是:"+matcher.group());
        }
    }

}

  

2.Matcher.matches()

用于判断给定字符串是否与正则表达式匹配,返回一个布尔值。

3.Matcher.find()

用于在给定字符串中查找匹配正则表达式的子序列,返回一个布尔值,如果找到,则使用group方法获取匹配的子序列。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        Pattern pattern=Pattern.compile("\\d\\d\\d");
        Matcher matcher=pattern.matcher("a123b");
        System.out.println(matcher.find());//输出结果true
    }

}

4.Matcher.replaceAll(String replacement)

用于在给定正则表达式中替换正则表达式的子序列,replacement是一个字符串类型的替换字符串。

五、字符串的连接

字符串可以进行加法运算,作用是将两个字符串连接到一起,也可以将字符串与基本数据类型变量做加法运算,系统会先将基本数据类型转换成字符串型后进行连接操作。

将两个字符串连接到一起可以用加号连接,也可以使用concat()方法连接。

public class Main {

    public static void main(String[] args) {
        String firstName="李";
        String lastName="逵";
        String fullName=firstName+lastName;
        System.out.println("姓名是:"+fullName);//姓名是:李逵
    }

}
public class Main {

    public static void main(String[] args) {
        String firstName="李";
        String lastName="逵";
        String fullName=firstName.concat(lastName);
        System.out.println("姓名是:"+fullName);//姓名是:李逵
    }

}

六、字符串的比较

字符串进行比较时不能直接用“==”运算符,而是要使用equals()方法进行比较。

重要提示:

equals都是用于比较两个对象的操作:

①==操作符用于比较两个对象的引用是否指向同一内存地址。

②equals()方法用于比较两个对象的值是否相等。默认情况下,equals()方法比较两个对象的引用是否相等,但可以通过重写该方法来实现自定义的相等比较逻辑。

③对于基本数据类型,==操作符比较的是它们的值。

七、字符串的长度

String类的length()方法可以获取字符串是由多少个字符组成的。

package structure;

import java.util.Scanner;

public class AA {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户名:");
        String name=sc.next();
        if (name.length()>=6&&name.length()<=20){
            System.out.println("用户名长度合法");
        }else {
            System.out.println("用户名长度不合法");
        }
    }

}

在数组中length属于数组的属性,在字符串中length()是字符串的方法。 

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

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

相关文章

CRM客户管理系统是什么?

CRM的含义我们都知道&#xff0c;是客户关系管理的缩写&#xff0c;更多地用来代表CRM系统。所以CRM管理又可以理解为通过CRM系统进行管理。那么下面我们就来详细说说&#xff0c;什么是crm管理&#xff1f; CRM管理功能主要包括&#xff1a; 营销管理&#xff1a; CRM系统可…

【规范】Apifox就应该这么玩

前言 &#x1f34a;缘由 好的工具就要配好的玩法 起因是最近在回顾项目时&#xff0c;看到了年事已高并且长时间不用的Postman&#xff0c;发现之前自己整理的接口文档十分混乱且没有规律。遂打开现在使用的Apifox&#xff0c;将本狗目前项目中使用Apifox的整理规范和使用方…

【数据结构前置知识】初识集合框架和时间,空间复杂度

文章目录 1. 什么是集合框架2. 集合框架的重要性 3. 背后所涉及的数据结构以及算法3.1 什么是数据结构3.2 容器背后对应的数据结构3.3 相关java知识3.4 什么是算法 4.时间复杂度1. 如何衡量一个算法的好坏2. 算法效率3. 时间复杂度3.1 时间复杂度的概念3.2 大O的渐进表示法3.3 …

【ESP32】以蓝牙网关为例,记录队列的使用

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的菜鸟打工人。&#x1f60e;&#x1f4dd; 个人主页&#xff1a;欢迎访问我的 Ethernet_Comm 博客主页&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收…

geek完全卸载sqlserver2012

前言 有时候sqlserver2012 出现问题&#xff0c;需要卸载安装 会出现卸载不干净的问题 需要用到geek去卸载 卸载 双击exe打开软件 输入sql查询相关的软件 依次一个一个的去删除

Zynq7020 纯VHDL解码 MIPI 视频,4路图像缩放拼接输出,提供vivado工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优越性4、详细设计方案设计原理框图OV5640摄像头及其配置D-PHY 模块CSI-2-RX 模块Bayer转RGB模块伽马矫正模块VDMA图像缓存Video Scaler 图像缓存RGB转HDMI模块MIPI D-PHY 硬件方案 5、vivad…

如何短期通过PMP考试?(含pmp干货)

一般PMP的准备考试时间都是一个月到三个月之间&#xff0c;一般都不会花超过半年的时间去准备考试的&#xff0c;毕竟想要学习项目管理的人一般应该都还是讲究高效率的&#xff0c;对待考试肯定也是在短时间内去高效学习备考的。 但对于怎样在短期内能够极好的去迎战PMP考试&a…

回溯算法 —— 子集问题

如果说组合问题可以说是思考如何使用回溯算法收割叶子节点的结果、 那么子集问题就是思考如何使用回溯算法收割每一个节点的结果 回溯算法的解题三部曲&#xff1a;1.确定传入的参数 2.确定终止条件 3.确定单层遍历逻辑 ​​​​​​78. 子集 本题就是经典的子集问题了&…

【SpringMvc 丨跨域】

Spring MVC 支持跨域处理&#xff08;CORS&#xff09;。 CORS 简介处理CORS 过滤器CrossOrigin注解java配置xml配置 主页传送门&#xff1a;&#x1f4c0; 传送 简介 跨域是指在浏览器的同源策略下&#xff0c;不能执行其他网站的脚本。它是由浏览器的安全限制造成的&#xf…

C++程序入门(helloworld.cpp编写)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

辅助驾驶功能开发-控制篇(01)-基于PID的横向控制算法

1 文档概述 本文档主要描述Lateral Control(横向控制)设计的功能要求、性能要求、算法推导。 2 功能要求 横向控制(Lateral Control)系统根据上层运动规划输出的期望路径、曲率等信息进行跟踪控制,以减少跟踪误差,同时保证车辆行驶平稳性和舒适性。 3 性能要求 控制系统应…

类和对象【基础概念】

全文目录 类的定义定义方式 类的访问限定符封装&#xff08;面向对象的三大特性之一&#xff09; 类对象模型类对象的存储方式类对象的大小计算 this指针this指针的特性**this指针可以为空吗&#xff1f;** 类的定义 在C中&#xff0c;C语言中的结构体struct中除了定义变量外还…

深度学习中softmax激活函数的用法

在深度学习中&#xff0c;“softmax” 是一种常用的激活函数&#xff0c;它主要用于多类别分类任务中的输出层。“Softmax” 是 “soft maximum” 的缩写&#xff0c;它通过将输入的实数向量转换为概率分布&#xff0c;用于表示相应类别的概率。

Tomcat多实例部署和动静分离

一、多实例部署&#xff1a; 多实例&#xff1a;多实例就是在一台服务器上同时开启多个不同的服务端口&#xff0c;同时运行多个服务进程&#xff0c;这些服务进程通过不同的socket监听不同的服务端口来提供服务。 1.前期准备&#xff1a; 1.关闭防火墙&#xff1a;systemctl …

Postman —— 配置环境变量

PostMan是一套比较方便的接口测试工具&#xff0c;但我们在使用过程中&#xff0c;可能会出现创建了API请求&#xff0c;但API的URL会随着服务器IP地址的变化而改变。 这样的情况下&#xff0c;如果每一个API都重新修改URL的话那将是非常的麻烦&#xff0c;所以PostMan中也提供…

【宝藏系列】几款好用的 Spring Boot 内置工具类

【宝藏系列】几款好用的 Spring Boot 内置工具类 文章目录 【宝藏系列】几款好用的 Spring Boot 内置工具类断言对象字符串集合文件资源IO 流反射AOP&#x1f349;文末推荐【深入浅出Java虚拟机】 断言 断言是一个逻辑判断&#xff0c;用于检查不应该发生的情况 Assert 关键字…

ARM接口编程—IIC总线(exynos 4412平台)

IIC总线简介 IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线 主要用于近距离、低速的芯片之间的通信&#xff1b;IIC总线有两根双向的信号线一根数据线SDA用于收发数据&#xff0c;一根时钟线SCL用于通信双方时钟的同步&#xff1b;IIC总线硬件结构简单&#xff…

Vim9用netrw快速打开文件

Vim9有一个自带的文件浏览器——netrw&#xff0c;它的功能很强大。今天我们给它添加两个快捷命令&#xff1a; Ctrl回车键&#xff0c;一次打开多个文件Alt回车键&#xff0c;打开文件后自动关闭目录窗口 一、修改vimrc文件&#xff1a; 操作路径&#xff1a;编辑》启动设置…

Python判断多个文件夹的文件夹名是否包含“分公司”或“营销中心”怎么处理?(方法二)...

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 先帝称之曰能&#xff0c;是以众议举宠为督。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python最强王者群【哎呦喂 是豆子&#xff5e;】问了一…

SOME/IP

介绍 SOME/IP是一种汽车中间件解决方案&#xff0c;可用于控制消息。它从一开始就被设计为完美地适应不同尺寸和不同操作系统的设备。这包括小型设备&#xff0c;如相机、AUTOSAR 设备&#xff0c;以及头戴设备或远程通信设备。它还确保SOME/IP支持信息娱乐域以及车辆中其他域…