java面试题:判断字符串包含字母、数字、空格、符号的数量

 在Java中,你可以使用正则表达式来检查字符串中包含多少个字母、数字、空格和符号。也可以使用基础api来实现业务逻辑,方法如下:

1 使用Character类的静态方法

以下代码定义了一个countCharacters方法,它遍历字符串中的每个字符,使用Character类的静态方法来检查每个字符是否是字母、数字、空格或符号,并相应地增加计数器。最后,它返回一个字符串,包含每种字符类型的数量。

public class CharacterCount {

    public static void main(String[] args)
    {
        String input = "hello,beautiful girl!123455";
        System.out.println(countCharacters(input));
    }

    public static String countCharacters(String input){
        int letters = 0,digits = 0,spaces = 0,symbols = 0;
        char[] chars = input.toCharArray();

        for (char c : chars) {
            if (Character.isLetter(c)) {
                //判断是否为字符
                letters++;
            } else if (Character.isDigit(c)) {
                //判断是否为数字
                digits++;
            } else if (Character.isSpaceChar(c)) {
                //判断是否为空格
                spaces++;
            } else {
                判断是否为其他符号
                symbols++;
            }
        }

        return "包含字母: " + letters + "个, 包含数字: " + digits + "个, 包含空格: " + spaces + "个, 包含其他符号: " + symbols+"个";
    }

}

结果如下:

2 使用正则表达式移除非统计字符

下面代码定义了一个StringStats类,其中包含四个方法:countLetters、countDigits、countSpaces和countSymbols。countLetters和countDigits方法通过正则表达式移除非字母和非数字的字符,然后返回剩余字符串的长度。countSpaces方法通过分割字符串获取空格的数量。countSymbols方法则通过从字符串总长度中减去字母、数字和空格的数量来得到符号的数量。

public class StringStats {
    public static void main(String[] args) {
        String input = "Example! String, with 123 numbers and spaces.";
        System.out.println("包含字符:"+countLetters(input)+"个");
        System.out.println("包含数字:"+countDigits(input));
        System.out.println("包含空格:"+countSpaces(input));
        System.out.println("包含其他符号:"+countSymbols(input));
    }

    public static int countLetters(String input) {
        return input.replaceAll("[^a-zA-Z]", "").length();
    }

    public static int countDigits(String input) {
        return input.replaceAll("[^0-9]", "").length();
    }

    public static int countSpaces(String input) {
        return input.split(" ").length - 1;
    }

    public static int countSymbols(String input) {
        return input.length() - countLetters(input) - countDigits(input) - countSpaces(input);
    }
}

结果如下:

3 使用正则表达式进行统计字符匹配

以下代码会统计并打印出输入字符串中的字母、数字、空格和符号的数量。正则表达式\\p{Alpha}+用于匹配字母,\\d+用于匹配数字,\\s+用于匹配空格,[^\\p{Alpha}\\d\\s]+用于匹配符号。然后使用Matcher类的find()方法来查找所有的匹配项,并计算它们的长度。

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

public class CharacterCounter {
    public static void main(String[] args) {
        String input = "Hello, World! 123 456.";
        int letters = 0;
        int digits = 0;
        int spaces = 0;
        int symbols = 0;

        // 正则表达式
        String regexLetters = "\\p{Alpha}+"; // 匹配字母
        Pattern patternLetters = Pattern.compile(regexLetters);
        Matcher matcherLetters = patternLetters.matcher(input);

        String regexDigits = "\\d+"; // 匹配数字
        Pattern patternDigits = Pattern.compile(regexDigits);
        Matcher matcherDigits = patternDigits.matcher(input);


        String regexSpaces = "\\s+"; // 匹配空格
        Pattern patternSpaces = Pattern.compile(regexSpaces);
        Matcher matcherSpaces = patternSpaces.matcher(input);

        String regexSymbols = "[^\\p{Alpha}\\d\\s]+"; // 匹配符号
        Pattern patternSymbols = Pattern.compile(regexSymbols);
        Matcher matcherSymbols = patternSymbols.matcher(input);


        while (matcherLetters.find()) {
            letters += matcherLetters.group().length();
        }
        while (matcherDigits.find()) {
            digits += matcherDigits.group().length();
        }
        while (matcherSpaces.find()) {
            spaces += matcherSpaces.group().length();
        }
        while (matcherSymbols.find()) {
            symbols += matcherSymbols.group().length();
        }
        
        System.out.println("包含字符:"+letters+"个");
        System.out.println("包含数字:"+digits+"个");
        System.out.println("包含空格:"+spaces+"个");
        System.out.println("包含其他符号:"+symbols+"个");

    }
}

结果如下:

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

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

相关文章

戒烟网站|基于SSM+vue的戒烟网站系统的设计与实现(源码+数据库+文档)

戒烟网站 目录 基于SSM+vue的戒烟网站系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1网站功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主…

REACT 在组件之间共享状态

有时,您希望两个组件的状态始终一起变化。要做到这一点,请从他们俩身上删除状态,将其移动到他们最近的共同父级,然后通过道具将其传递给他们。这被称为提升状态,这是编写 React 代码时最常见的事情之一。 举例提升状态…

从ROS到数据库:用Python将ROS话题消息保存到数据库

观前提醒:本博客介绍如何使用Python订阅ROS话题,并将接收到的消息保存到SQL数据库中,包括MySQL和SQL Server两种情况。 使用Python订阅ROS话题并将消息保存至MySQL数据库 下面我们将详细介绍如何使用Python订阅ROS话题,并将接收的数据保存到MySQL数据库…

Postman基础功能-Collection集合和批量运行

一、Collection(集合)介绍 当我们对一个或多个系统中的很多接口用例进行维护时,首先想到的就是对接口用例进行分类管理,同时还希望对这批接口用例做回归测试。 在 Postman 中也提供了这样一个功能,就是 Collec…

【网站项目】SpringBoot781乐乐农产品销售系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

上官婉儿传奇的一生(戴罪之身入宫,却深得两任君主重用)

她最初的身份是罪臣之女、官婢,历经三代帝王更迭,她顶着后妃的头衔,成为武则天和李显的内阁大总管,她是如何赢得两位帝王的信任? 01从官婢到女官的逆袭 公元664年,上官婉儿出生在唐高宗时代,她…

免费无限换脸 - 最强AI换脸Facefusion整合包最新版来啦!

今天我要分享的是FaceFusion最新版,它最近更新到了2.5.3版本,带来了许多激动人心的改进和优化。 Facefusion2.5.3版本介绍 FaceFusion不仅仅是一款换脸软件,它更是一个多功能的数字人和实时直播助手,真正开启了个性化媒体的新时代…

tomcat 的启动流程

tomcat 的启动流程 中 使用的Lifecycle 生命流程 。在这里还使用了设计模式中的模板模式(LifecycleBase 是一个模板类) init()方法 start() 方法 container 的处理

【STM32 |示例程序】EXTI中断示例程序(对射式红外传感器旋转编码器计次)

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 丠丠64-CSDN博客🎈🎈 ✨✨ 帅哥美女们,我们共同加油!一起…

携程网站_广州动物园景点评论采集和处理

一、爬取携程网站_广州动物园景点评论数据100条 数据包括&#xff1a;用户名、评论文本内容、发布时间</n> 结果分别保存在userNames&#xff0c;commentDetails commentTimes列表中。 import requests import json import time userNames [] commentDetails [] com…

ComfyUI相见恨晚的提示词插件,简直堪称神器!

之前我曾介绍过一款专为SD设计的中文提示词插件——prompt-all-in-one&#xff0c;想必使用过的小伙伴们都已经感受到了它的便捷与实用吧。 不过&#xff0c;那款插件是基于webUI版本的&#xff0c;而现在&#xff0c;越来越多的朋友开始探索ComfyUI这一新选择。 假如在Comfy…

Netty-面试题(中)(五十)

关于零拷贝和堆外内存 Java在将数据发送出去的时候&#xff0c;会先将数据从堆内存拷贝到堆外内存&#xff0c;然后才会将堆外内存再拷贝到内核态&#xff0c;进行消息的收发&#xff0c;代码如下: 所以&#xff0c;我们发现&#xff0c;假如我们在收发报文的时候使用直接内存&…

(接上一篇linux rocky 搭建DNS高阶版)实现不同网段访问解析不同的服务器并加域

上一篇链接&#xff1a;linux rocky 搭建DNS服务和禁止AD域控DNS&#xff0c;做到独立DNS并加域-CSDN博客文章浏览阅读417次&#xff0c;点赞13次&#xff0c;收藏7次。使用linux rocky 搭建DNS服务&#xff0c;用于独立AD域控DNS存在&#xff0c;并且实现加域。https://blog.c…

从需求到实现:能源软件服务商如何量身定制企业解决方案

能源行业需要数字化转型的原因主要有以下几点&#xff1a;首先&#xff0c;数字化技术可以提高生产效率和安全性&#xff0c;通过实时监控和智能调度降低事故风险&#xff0c;并实现远程控制和自动化生产。其次&#xff0c;数字化转型有助于推动能源行业的创新发展&#xff0c;…

51单片机GPS+sim800c GSM定位短信LCD1602液晶显示 原理图+PCB+源码

目录 1、实物图 2、原理图 ​3、PCB​编辑 4、程序 资料下载地址&#xff1a;51单片机GPSsim800c GSM定位短信LCD1602液晶显示 原理图PCB源码 1、实物图 2、原理图 3、PCB 4、程序 #include "common.h" #include "uart.h" #include "gps.h&…

Linux(多线程)

//blockQueue.hpp #pragma once #include <iostream> #include <queue> #include <pthread.h> const int gcap 5; template <class T> class BlockQueue { public:BlockQueue(const int cap gcap):_cap(cap)//初始化阻塞队列的容量{pthread_mutex_in…

java发送请求-二次开发-get请求json

这里有2个判断 如果param为空则对url发送请求 再继续判断有值时&#xff0c;接口参数时json还是namevalue格式 因为json是带{,所以可以先写为param包含{}, 反之就是请求格式是url&#xff1f;param 请求json要带参数&#xff0c;所以需要使用setEntity方法&#xff0c; 最…

数字人解决方案——AniTalker声音驱动肖像生成生动多样的头部说话视频算法解析

1.概述 AniTalker是一款先进的AI驱动的动画生成工具&#xff0c;它超越了简单的嘴唇同步技术&#xff0c;能够精准捕捉并再现人物的面部表情、头部动作以及其他非言语的微妙动态。这不仅意味着AniTalker能够生成嘴型精准同步的视频&#xff0c;更重要的是&#xff0c;它还能够…

Mongo关联查询两张表中分别满足某些条件的记录

如果是在mysql里面&#xff0c;这个查起来就很方便&#xff0c;但是&#xff0c;在mongo里面的话&#xff0c;查询起来就没这么方便了。 如果使用付费版的Studio 3T工具的话&#xff0c;也可以像使用mysql一样查询mongo数据&#xff0c;但是免费版不支持sql的用法&#xff0c;只…

轻松上手:几款易用性强的加密软件推荐

在现代社会&#xff0c;随着信息技术的不断发展和普及&#xff0c;数据安全成为了每个人都需要面对的重要问题。为了保护个人隐私和重要信息&#xff0c;加密软件成为了我们不可或缺的工具。本文将为您推荐几款易用性强的加密软件&#xff0c;帮助您轻松上手&#xff0c;确保数…