当前位置: 首页 > article >正文

【高级编程】实用类详解(中)String类及其常用方法 含判断邮箱格式案例

文章目录

    • String
      • int length()
      • String equals()
      • char charAt()
      • String replace()
      • 其他常用方法
      • 判断邮箱格式案例

String

String类位于java.lang包中,具有丰富的方法:计算字符串的长度、比较字符串、连接字符串、提取字符串…

使用String对象存储字符串

String s = "Hello World";
String s = new String();
String s = new String("Hello World");

int length()

确定字符串的长度

// 注册新用户,要求密码长度不能小于6位 
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入用户名:");
    String name = scanner.next();
    System.out.print("请输入密码:");
    String pwd = scanner.next();
    if (pwd.length() < 6 ){
        System.out.println("密码长度不能小于6位!");
    } else {
        System.out.println("注册成功!");
    }
}

String equals()

比较存储在两个字符串对象的内容是否一致

// 注册成功后,实现登录验证。用户名为“TOM”,密码为“1234567” 
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入用户名:");
    String name = scanner.next();
    System.out.print("请输入密码:");
    String pwd = scanner.next();
    if ("TOM".equals(name) && "1234567".equals(pwd)){
        System.out.println("登录成功!");
    } else {
        System.out.println("用户名或密码不匹配,登录失败!");
    }
}

"=="和 equals() 的区别

equals(): 检查组成字符串内容的字符是否完全一致

==: 判断两个字符串在内存中的地址,即判断是否是同一个字符串对象

字符串比较的其他方法

  • 使用 equalsIgnoreCase() 忽略大小写

  • 使用 toLowerCase() 小写

  • 使用 toUpperCase() 大写

// 登录时不考虑用户名的大小写问题,实现登录 
Scanner scanner = new Scanner(System.in);
System.out.print("请输入用户名:");
String name = scanner.next();
System.out.print("请输入密码:");
String pwd = scanner.next();
if ("TOM".equalsIgnoreCase(name) && "1234567".equals(pwd)){
    System.out.println("登录成功!");
} else {
    System.out.println("用户名或密码不匹配,登录失败!");
}

char charAt()

返回指定索引位置的字符

// 例 1
String str = "Hello, World!";
char ch = str.charAt(7);
System.out.println("字符串中的字符: " + ch); // W

// 例 2
String content = "我爱你中国,中国我爱你";
int count = 0;
for (int i = 0; i < content.length(); i++) {
    if (content.charAt(i) == '爱') {
        count++;
    }
}
System.out.println("content中含'爱'字个数:" + count);

如果传递给 charAt() 方法的索引超出了字符串的范围(小于 0 或大于等于字符串长度),将会抛出 StringIndexOutOfBoundsException 异常。

String replace()

replace 方法用于替换字符串中的某些字符或子字符串。全部替换

方法签名

public String replace(CharSequence target, CharSequence replacement)

public String replace(char oldChar, char newChar)

String content = "你这人傻子吧,你是个傻子吧";
content = content.replace("傻子","**");
System.out.println(content); // 输出:"你这人**吧,你是个**吧"

String content = "你这2人傻子吧1,5你4是个3傻子吧";
content = content.replaceAll("\\d","\\$");
System.out.println(content); // 输出:"你这$人傻子吧$,$你$是个$傻子吧"

其他常用方法

方法名说明
public int indexOf(int ch)搜索第一个出现的字符ch,如果没有找到,返回-1
public int indexOf(String value)搜索第一个出现的字符串value,如果没有找到,返回-1
public int lastIndexOf(int ch)搜索最后一个出现的字符ch,如果没有找到,返回-1
public int lastIndexOf(String value)搜索最后一个出现的字符串value,如果没有找到,返回-1
public String substring(int index)提取从位置索引开始的字符串部分
public String substring(int beginindex, int endindex)提取beginindex和endindex之间的字符串部分(前闭后开)
public String trim()返回一个前后不含任何空格的调用字符串的副本
public String concat(String value)字符串拼接
public boolean endsWith(String value);判断字符串是否以指定字符串结尾
public String[] split()分割字符串,返回数组
// indexof()
int index = str.indexof("l");
System.out.println("查询某个指定字符是否存在:"+index); // 输出:2

// lastIndexof()
int lastindex = str.lastIndexof("l");
System.out.println("查询某个指定字符是否存在:"+lastindex); // 输出:3

// substring(开始位置<包含>,结束位置<不包含>)
String email = "7777@gg.cn.com";
string sub = email.substring(
    email.lastIndexof(".") + 1
    ,email.length());
System.out.printin(sub); // 输出:com


// trim() 去除左右空格
String msg = "  今天中午 吃什么?  ";
msg = msg.trim();
System.out.printin(msg); // 输出:今天中午 吃什么?

// concat()
String str = "hello";
System.out.println("字符串拼接:" + str1.concat(",aa")); // 输出:hello,aa

// endsWith()
String imgName = "1.jpg";
boolean bool = img.endsWith("png");
System.out.printIn("是否为png格式:" + bool); // 输出:false

// split()
String arr = "1001+1002+1003";
String arrs[] = arr.split("\\+");
System.out.printIn(Arrays.tostring(arrs)); // 输出:[1001,1002,1003]

判断邮箱格式案例

判断邮箱格式是否正确 例如: 777@99.com
1. 邮箱中必须包含@和.操作符
2. @必须在.之前
3. @于.之间必须存在1个以上字符
4. @之前最少要有2个字符
5. 后缀名必须以com,cn,net结束
private static final Set<String> VALID_DOMAINS = new HashSet<>(Arrays.asList("com", "cn", "net"));

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入邮箱:");
    String content = scanner.next();
    if (isTrueEmail(content)) {
        System.out.println("邮箱格式正确!!!");
    } else {
        System.out.println("邮箱格式有误!!!");
    }
}

private static boolean isTrueEmail(String email) {
    // 找到最后的"@"和"."操作符出现的位置
    int atIndex = email.lastIndexOf("@");
    int dotIndex = email.lastIndexOf(".");

    // 检查"@"和"."的条件
    if (atIndex == -1 || dotIndex == -1 || atIndex >= dotIndex - 2 || atIndex < 2) {
        return false;
    }

    // 检查"."是否在"@"后面
    if (dotIndex <= atIndex + 1) {
        return false;
    }

    // 检查后缀是否有效
    String domain = email.substring(email.lastIndexOf('.') + 1);
    return VALID_DOMAINS.contains(domain);
}

http://www.kler.cn/news/289833.html

相关文章:

  • springboot使用缓存
  • Java实现加密(六)国密SM2算法
  • 【Qt】QChart折线图
  • ROS 编程入门
  • 集成电路学习:什么是IP知识产权
  • 本地搭建 Whisper 语音识别模型实现实时语音识别研究
  • 单线程Redis:Redis为什么这么快
  • 【html】编辑器、基础、属性、标题、段落、格式化、 连接、头部、CSS、图像
  • 微服务日常总结
  • 【主机入侵检测】Wazuh解码器之JSON解码器
  • 24并发设计模式——线程池模式
  • 台球助教系统小程序源码开发与技术解析
  • LLM大模型学习:LoRA 大模型微调的利器
  • 第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)
  • 在SpringMVC中用fmt标签实现国际化/多语言
  • 装饰器模式(Decorator Pattern)
  • MACOS安装配置前端开发环境
  • 北芯生命持续亏损:产能利用率不理想仍扩产能,销售费用越来越高
  • Python世界:文件自动化备份实践
  • 由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)
  • 工业交换机如何确保品质
  • glsl着色器学习(四)
  • 日常避坑指南:如何合理利用Swap优化MongoDB内存管理
  • Linux驱动开发基础(IRDA 红外遥控模块)
  • E6000物联网主机:打造智慧楼宇的未来
  • Linux:vim编辑器的基本使用
  • 不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信
  • 6 自研rgbd相机基于rk3566之深度计算库移植及测试
  • Spring Boot集成Spring Cloud Scheduler进行任务调度
  • 如何使用Spoon连接data-integration-server并在服务器上执行转换