【高级编程】实用类详解(中)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);
}