Bootstrap

Java基础编程500题——正则表达式

💥 该系列属于【Java基础编程500题】专栏,如您需查看Java基础的其他相关题目,请您点击左边的连接

目录

1. 检测是不是QQ号(6位及20位之内,0不能在开头,必须全部是数字)

2. 判断字符串是否为手机号码。 手机号码规则:以1开头,第二位是3/4/5/7/8之一,后面跟着9位数字。

3. 将字符串中的所有数字替换成“*”。

4. 分割字符串,以非数字字符为分隔符。

5. 提取字符串中的所有数字。

6. 删除字符串中的所有空白字符。

7. 检查字符串是否为有效的电子邮件地址。 电子邮件地址规则:包含一个或多个字符@,后面跟着一个或多个字符,一个点,然后是两个或三个字母。

8. 给定一个字符串,检查它是否只包含字母和数字。

9. 使用正则表达式检查字符串是否只包含字母和数字。

10. 使用正则表达式检查字符串是否为有效的日期格式(YYYY-MM-DD)。

11. 给定一个包含HTML标签的字符串,删除所有的HTML标签。

12. 提取字符串中的所有邮箱地址。

13. 从字符串中提取出所有的网址。

14. 检查字符串是否含有"张"。(模糊查询)

15. 检查字符串是否包含至少一个小写字母和一个大写字母。

16. 检查字符串是否以字母开头,并且后面跟着任意数量的字母或数字。

17. 检查字符串是否以字母开头,并且后面跟着任意数量的字母或数字。

18. 验证字符串是否以 “http://” 开头。

19. 验证字符串是否以 “.com” 结尾。

20. 验证字符串是否以 “http://” 开头,并且以“.com” 结尾。

21. 检查字符串是否只包含字母,并且长度为5。

22. 将字符串中的所有连续重复的字符缩减为单个字符。

23. 提取字符串中的日期和时间(格式:YYYY-MM-DD HH:MM:SS)。

24. 检查字符串是否为有效的电子邮件地址,并提取用户名和域名。

25. 提取字符串中的HTML标签及其属性。

26. "\\b"匹配独立的单词 “cat”。

27. 匹配以 “a” 开头和以 “z” 结尾的单词。

28. 匹配字符串开头的大写字母。

29. 匹配字符串结尾的数字。

30. 将字符串中的每个单词首字母大写,其余字母小写。


  ✨✨  返回题目目录 ✨ ✨ 

Java基础编程500题


1. 检测是不是QQ号(6位及20位之内,0不能在开头,必须全部是数字)

public class Main {
    public static void main(String[] args) {
        //[]是或,{}是重复次数
        String qq = "1234567890";
        System.out.println(qq.matches("[1-9]\\d{5,19}"));
    }
}

2. 判断字符串是否为手机号码。 手机号码规则:以1开头,第二位是3/4/5/7/8之一,后面跟着9位数字。

public class Main {
    public static void main(String[] args) {
        String phone1 = "13812345678";
        String phone2 = "12345678900";
        System.out.println("phone1是否为手机号码:" + phone1.matches("1[34578]\\d{9}"));
        System.out.println("phone2是否为手机号码:" + phone2.matches("1[34578]\\d{9}"));
    }
}

3. 将字符串中的所有数字替换成“*”。

public class Main {
    public static void main(String[] args) {
        String str = "我喜欢数字123和456";
        String result = str.replaceAll("\\d", "*");
        System.out.println("替换后的字符串:" + result);
    }
}

4. 分割字符串,以非数字字符为分隔符。

public class Main {
    public static void main(String[] args) {
        String str = "abc123def456ghi";
        String[] result = str.split("\\d+");
        for (String s : result) {
            System.out.println("分割后的字符串:" + s);
        }
    }
}

5. 提取字符串中的所有数字。

public class Main {
    public static void main(String[] args) {
        String str = "这里有数字123和456,还有7890";
        System.out.println("提取的数字有:" + str.replaceAll("\\D+", " ")); // D要大写
    }
}

6. 删除字符串中的所有空白字符。

public class Main {
    public static void main(String[] args) {
        String str = "  字符串  中有  空白字符 ";
        System.out.println("删除空白字符后的字符串:" + str.replaceAll("\\s+", ""));
    }
}

7. 检查字符串是否为有效的电子邮件地址。 电子邮件地址规则:包含一个或多个字符@,后面跟着一个或多个字符,一个点,然后是两个或三个字母。

public class Main {
    public static void main(String[] args) {
        String email1 = "[email protected]";
        String email2 = "test@domain";
        System.out.println("email1是否为有效电子邮件地址:" + email1.matches("\\w+@\\w+\\.\\w{2,3}"));
        System.out.println("email2是否为有效电子邮件地址:" + email2.matches("\\w+@\\w+\\.\\w{2,3}"));
    }
}

8. 给定一个字符串,检查它是否只包含字母和数字。

public class Main {
    public static void main(String[] args) {
        String input = "Abc123";
        boolean isAlphanumeric = input.matches("[A-Za-z0-9]+");
        System.out.println("该字符串是否只包含字母和数字:" + isAlphanumeric);
    }
}

9. 使用正则表达式检查字符串是否只包含字母和数字。

public class Main {
    public static void main(String[] args) {
        String input = "Abc123";
        boolean isAlphanumeric = input.matches("[A-Za-z0-9]+");
        System.out.println("该字符串是否只包含字母和数字:" + isAlphanumeric);
    }
}

10. 使用正则表达式检查字符串是否为有效的日期格式(YYYY-MM-DD)。

public class Main {
    public static void main(String[] args) {
        String date = "2023-12-31";
        boolean isValidDate = date.matches("\\d{4}-\\d{2}-\\d{2}");
        System.out.println("该字符串是否为有效的日期格式:" + isValidDate);
    }
}

11. 给定一个包含HTML标签的字符串,删除所有的HTML标签。

public class Main {
    public static void main(String[] args) {
        String htmlContent = "这是一个<b>加粗</b>的文本和一个<i>斜体</i>文本";
        String textWithoutHtml = htmlContent.replaceAll("<[^>]*>", "");
        System.out.println("去除HTML标签后的字符串:" + textWithoutHtml);
    }
}

12. 提取字符串中的所有邮箱地址。

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

public class Main {
    public static void main(String[] args) {
        String text = "我的邮箱是[email protected],他的邮箱是[email protected]";
        Pattern pattern = Pattern.compile("\\w+@\\w+\\.\\w+");
        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            System.out.println("找到邮箱:" + matcher.group());
        }
    }
}

13. 从字符串中提取出所有的网址。

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

public class Main {
    public static void main(String[] args) {
        String text = "网站地址是http://www.example.com,还有一个https://secure.example.com";
        Pattern pattern = Pattern.compile("http[s]?://(\\w+\\.)+\\w+");
        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            System.out.println("找到网址:" + matcher.group());
        }
    }
}

14. 检查字符串是否含有"张"。(模糊查询)

public class Main {
    public static void main(String[] args) {
        String name = "张医生";
        if (name.matches(".*张.*")) {
            System.out.println("字符串含有'张'");
        } else {
            System.out.println("字符串不含有'张'");
        }
    }
}

15. 检查字符串是否包含至少一个小写字母和一个大写字母。

public class Main {
    public static void main(String[] args) {
        String input = "AbcDef";
        if (input.matches(".*[a-z].*") && input.matches(".*[A-Z].*")) {
            System.out.println("字符串包含至少一个小写字母和一个大写字母");
        } else {
            System.out.println("字符串不符合要求");
        }
    }
}

16. 检查字符串是否以字母开头,并且后面跟着任意数量的字母或数字。

public class Main {
    public static void main(String[] args) {
        String input = "Apple123";
        if (input.matches("^[A-Za-z][A-Za-z0-9]*$")) {
            System.out.println("字符串以字母开头,后面跟着字母或数字");
        } else {
            System.out.println("字符串不符合要求");
        }
    }
}

17. 检查字符串是否以字母开头,并且后面跟着任意数量的字母或数字。

public class Main {
    public static void main(String[] args) {
        String input = "Apple123";
        if (input.matches("^[A-Za-z][A-Za-z0-9]*$")) {
            System.out.println("字符串以字母开头,后面跟着字母或数字");
        } else {
            System.out.println("字符串不符合要求");
        }
    }
}

18. 验证字符串是否以 “http://” 开头。

public class Main {
    public static void main(String[] args) {
        String url = "http://www.example.com";
        if (url.matches("^http://.*")) {
            System.out.println("字符串以 'http://' 开头");
        } else {
            System.out.println("字符串不以 'http://' 开头");
        }
    }
}

19. 验证字符串是否以 “.com” 结尾。

public class Main {
    public static void main(String[] args) {
        String email = "http://www.example.com";
        if (email.matches(".*\\.com$")) {
            System.out.println("字符串是有效的电子邮件地址");
        } else {
            System.out.println("字符串不是有效的电子邮件地址");
        }
    }
}

20. 验证字符串是否以 “http://” 开头,并且以“.com” 结尾。

public class Main {
    public static void main(String[] args) {
        String email = "http://www.example.com";
        if (email.matches("^http://.*\\.com$")) {
            System.out.println("字符串是有效的电子邮件地址");
        } else {
            System.out.println("字符串不是有效的电子邮件地址");
        }
    }
}

21. 检查字符串是否只包含字母,并且长度为5。

public class Main {
    public static void main(String[] args) {
        String word = "Apple";
        if (word.matches("^[A-Za-z]{5}$")) {
            System.out.println("字符串只包含字母,并且长度为5");
        } else {
            System.out.println("字符串不符合要求");
        }
    }
}

22. 将字符串中的所有连续重复的字符缩减为单个字符。

public class Main {
    public static void main(String[] args) {
        String text = "aaabbbccca";
        String reducedText = text.replaceAll("(.)\\1+", "$1");
        System.out.println("缩减后的字符串:" + reducedText); //abca
        //   (.):这是一个捕获组,. 表示匹配任意单个字符,而括号 () 表示将匹配到的字符作为一个捕获组。在这个例子中,捕获组会捕获一个字符。
        //   \\1:这是一个反向引用,它引用了第一个捕获组 (.) 匹配到的内容。\\1 表示匹配与第一个捕获组相同的内容。
        //   +:这是一个量词,表示前面的元素(这里是反向引用 \\1)可以出现一次或多次。
        //   $1:这是对第一个捕获组的引用,在替换文本中,它会被第一个捕获组匹配到的字符所替换。

    }
}

23. 提取字符串中的日期和时间(格式:YYYY-MM-DD HH:MM:SS)。

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

public class Main {
    public static void main(String[] args) {
        String dateTime = "事件发生在 2023-04-05 14:23:56";
        Pattern pattern = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})");
        Matcher matcher = pattern.matcher(dateTime);
        if (matcher.find()) {
            System.out.println("日期:" + matcher.group(1) + "-" + matcher.group(2) + "-" + matcher.group(3));
            System.out.println("时间:" + matcher.group(4) + ":" + matcher.group(5) + ":" + matcher.group(6));
        }
    }
}

24. 检查字符串是否为有效的电子邮件地址,并提取用户名和域名。

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

public class Main {
    public static void main(String[] args) {
        String email = "[email protected]";
        Pattern pattern = Pattern.compile("^(\\w+)@(\\w+\\.\\w+)$");
        Matcher matcher = pattern.matcher(email);
        if (matcher.find()) {
            System.out.println("是有效的电子邮件地址");
            System.out.println("用户名:" + matcher.group(1));
            System.out.println("域名:" + matcher.group(2));
        } else {
            System.out.println("不是有效的电子邮件地址");
        }
    }
}

25. 提取字符串中的HTML标签及其属性。

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

public class Main {
    public static void main(String[] args) {
        String html = "<a href='http://example.com'>链接</a>";
        Pattern pattern = Pattern.compile("<(\\w+)(.*?)>(.*?)</\\1>");  //  \\1表示跟第一个捕获组一样的内容
        Matcher matcher = pattern.matcher(html);
        while (matcher.find()) {
            System.out.println("标签:" + matcher.group(1));           //标签:a
            System.out.println("属性:" + matcher.group(2).trim());    //属性:href='http://example.com'
            System.out.println("内容:" + matcher.group(3));           //内容:链接
        }
    }
}

26. "\\b"匹配独立的单词 “cat”。

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

public class Main {
    public static void main(String[] args) {
        String text = "I have a cat named Cat.";
        // \b 在正则表达式中表示单词边界,它确保匹配的字符串前后不是其他单词字符(通常是字母、数字或下划线)
        Pattern pattern = Pattern.compile("\\bcat\\b");
        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            System.out.println("匹配的单词: \"" + matcher.group() + "\" 在位置: " + matcher.start());
        }
    }
}

27. 匹配以 “a” 开头和以 “z” 结尾的单词。

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

public class Main {
    public static void main(String[] args) {
        String text = "apples azimuth banana";
        Pattern pattern = Pattern.compile("\\ba\\w*s\\b");
        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            System.out.println("匹配的单词: \"" + matcher.group() + "\" 在位置: " + matcher.start());
        }
    }
}

28. 匹配字符串开头的大写字母。

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

public class Main {
    public static void main(String[] args) {
        String text = "This is a Test.";
        Pattern pattern = Pattern.compile("\\b[A-Z]");
        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            System.out.println("匹配的大写字母: \"" + matcher.group() + "\" 在位置: " + matcher.start());
        }
        //匹配的大写字母: "T" 在位置: 0
        //匹配的大写字母: "T" 在位置: 10
    }
}

29. 匹配字符串结尾的数字。

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

public class Main {
    public static void main(String[] args) {
        String text = "The number is 42.";
        Pattern pattern = Pattern.compile("\\d+\\b");
        Matcher matcher = pattern.matcher(text);
        while (matcher.find()) {
            System.out.println("匹配的数字: \"" + matcher.group() + "\" 在位置: " + matcher.start());
        }
    }
}

30. 将字符串中的每个单词首字母大写,其余字母小写。

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

public class Main {
    public static void main(String[] args) {
        String text = "hello world";
        Pattern pattern = Pattern.compile("\\b(\\w)(\\w*)\\b");
        Matcher matcher = pattern.matcher(text);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, matcher.group(1).toUpperCase() + matcher.group(2).toLowerCase());
        }
        matcher.appendTail(sb);
        System.out.println("转换后的字符串:" + sb.toString());
    }
}

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;