Java笔试面试题AI答之正则表达式(3)

13. 简述Java String支持哪几种使用正则表达式的方法?

Java的String类通过其内置方法提供了对正则表达式的支持,允许进行模式匹配、查找、替换等操作。这些功能主要通过java.util.regex包中的类(特别是PatternMatcher类)来支持,但String类也提供了几个便利方法来直接使用正则表达式,主要包括:

  1. matches(String regex)

    • 该方法用于检查字符串是否完全匹配给定的正则表达式。
    • 如果整个区域序列匹配此字符串的正则表达式,则返回true;否则返回false
    • 注意,整个字符串需要匹配正则表达式,而不仅仅是字符串的一部分。
  2. replaceFirst(String regex, String replacement)

    • 使用给定的替换字符串替换此字符串第一次出现的匹配给定正则表达式的子字符串。
    • 如果没有子字符串匹配给定的正则表达式,则不会更改此字符串。
  3. replaceAll(String regex, String replacement)

    • 使用给定的替换字符串替换此字符串所有匹配给定正则表达式的子字符串。
    • 此方法首先会将给定的正则表达式编译成一个模式,然后将此模式与输入字符串进行匹配。

虽然String类本身直接提供了这些方法以支持正则表达式,但在复杂或需要更多控制的情况下(比如获取匹配组),直接使用PatternMatcher类可能会更灵活和强大。例如,通过Pattern.compile(String regex)来编译正则表达式,然后通过得到的Pattern对象调用matcher(CharSequence input)方法创建Matcher对象,之后可以利用Matcher对象的各种方法(如find(), group(), matches()等)进行复杂的模式匹配和文本处理。

14. 请列举常见校验数字的表达式 ?

校验数字(也称为校验码或检查码)是在数据传输或存储过程中,为了检测错误而添加的数字。这些数字通常是基于特定算法对原始数据(如序列号、银行账户号、身份证号等)进行计算得出的。以下是几种常见的校验数字算法及其表达式(以简单形式呈现):

  1. 模10校验(Luhn算法,常用于信用卡号)

    • 原理:从右向左对每一位数字进行加权求和,权重交替为1和2(从右到左的第1位权重为1,第2位为2,第3位为1,以此类推),然后将求和结果对10取模,最后看结果是否为0。如果不是0,则用10减去这个余数,得到的值即为校验位。
    • 表达式示例(伪代码):sum = Σ(digit[i] * (2 - (i % 2) * 2)),其中i从最后一位开始向前计数,然后对sum进行模10操作,非零结果即需要修正的值。
  2. 模11校验(常用于ISBN-10)

    • 原理:类似于模10校验,但权重可能不同,且可能需要处理进位(如加权和大于10时,减去9或进位到下一位)。
    • 表达式示例(伪代码):根据具体的权重分配进行计算,然后对结果进行模11操作,确保结果为0或特定的校验位。
  3. Verhoeff算法

    • 原理:比Luhn算法更复杂,通过一系列的多项式计算和一个2×2的校验矩阵来实现,能更准确地检测输入中的错误。
    • 表达式:难以用简单表达式表示,通常需要通过编程实现算法中定义的多项式乘法和矩阵运算。
  4. 奇偶校验位

    • 原理:在二进制数据序列的末尾添加一个位,使得整个序列中1的总数是奇数(奇校验)或偶数(偶校验)。
    • 表达式:不涉及复杂的计算,而是直接观察数据序列中1的个数,然后决定添加0还是1。
  5. CRC(循环冗余校验)

    • 原理:基于多项式除法的校验算法,通过在数据后面附加校验码来实现。校验码是原始数据多项式除以一个固定的多项式后得到的余数。
    • 表达式:涉及到多项式的乘法、除法和模运算,具体表达式依赖于所选的多项式。

这些算法中的每一种都有其特定的应用场景和优势。选择哪种算法取决于需要校验的数据类型、所需的错误检测能力以及性能考虑。

15. 请列举常见校验字符的表达式 ?

常见校验字符的表达式多种多样,主要用于验证输入字符串的格式是否符合特定规则。以下是一些常见的校验字符表达式:

1. 汉字

  • 表达式:^[\u4e00-\u9fa5]{0,}$
  • 说明:该表达式用于匹配任意长度的汉字字符串。[\u4e00-\u9fa5] 表示Unicode编码中汉字的范围。

2. 英文和数字

  • 表达式:^[A-Za-z0-9]+$^[A-Za-z0-9]{4,40}$
  • 说明:这两个表达式都用于匹配由英文字母和数字组成的字符串。第一个表达式要求至少有一个字符,而第二个表达式则要求字符串长度为4到40个字符之间。

3. 特定长度的字符串

  • 表达式:^.{3,20}$
  • 说明:这个表达式用于匹配任意字符(包括英文字母、数字、特殊字符等)组成的字符串,且长度在3到20个字符之间。

4. 由26个英文字母组成的字符串

  • 表达式:^[A-Z]+$(大写)或 ^[a-z]+$(小写)
  • 说明:这两个表达式分别用于匹配由大写或小写英文字母组成的字符串,且要求至少有一个字符。

5. 由数字和26个英文字母组成的字符串

  • 表达式:^[A-Za-z0-9]+$
  • 说明:该表达式用于匹配由英文字母和数字组成的字符串,且要求至少有一个字符。

6. 由数字、26个英文字母或者下划线组成的字符串

  • 表达式:^\w+$^\w{3,20}$
  • 说明:\w 是一个特殊字符类,等价于 [A-Za-z0-9_],即匹配任何字母数字字符或下划线。这两个表达式分别用于匹配至少有一个字符和长度为3到20个字符的字符串。

7. 中文、英文、数字包括下划线

  • 表达式:^[\u4E00-\u9FA5A-Za-z0-9_]+$
  • 说明:该表达式用于匹配包含汉字、英文字母、数字和下划线的字符串,且要求至少有一个字符。

8. 中文、英文、数字但不包括下划线等符号

  • 表达式:^[\u4E00-\u9FA5A-Za-z0-9]+$^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
  • 说明:这两个表达式都用于匹配包含汉字、英文字母和数字的字符串,但不包含下划线等符号。第一个表达式要求至少有一个字符,而第二个表达式则要求字符串长度为2到20个字符之间。

9. 特殊字符

  • 表达式:[^%&',;=?$\"]+
  • 说明:该表达式用于匹配包含%&';=?$"等特殊字符的字符串。注意,这里的^在方括号[]的开头表示取反,即匹配不在方括号内的字符。

10. 禁止输入特定字符

  • 表达式示例:[^\x22]+(禁止输入双引号"
  • 说明:通过指定不在方括号内的字符来禁止输入,\x22是双引号"的十六进制Unicode编码。

这些表达式可以根据具体需求进行调整和组合,以满足不同的校验要求。

16. 请列举常见特殊需求表达式?

常见特殊需求表达式(正则表达式)涵盖了多个方面,包括但不限于电子邮件地址、电话号码、身份证号码、日期格式等。以下是一些常见的特殊需求表达式示例:

1. 电子邮件地址

  • 表达式^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  • 说明:该表达式用于匹配标准的电子邮件地址格式。

2. 手机号码

  • 表达式^(13[0-9]|14[5|7]|15[0-9]|18[0-9])\d{8}$
  • 说明:该表达式用于匹配中国大陆的手机号码,包括常见的移动、联通、电信等运营商的号码。注意,随着号码段的更新,表达式可能需要调整。

3. 电话号码

  • 表达式(国内固定电话):\d{3}-\d{8}|\d{4}-\d{7}

  • 说明:该表达式用于匹配国内常见的固定电话号码格式,包括区号和电话号码。

  • 表达式(更灵活的电话号码):^((\d{3,4}-)|\d{3,4})?\d{7,8}$

  • 说明:此表达式支持多种电话号码格式,包括带有区号或不带区号的电话号码,区号可以为3到4位。

4. 身份证号码

  • 表达式(15位或18位):^\d{15}|\d{18}$
  • 表达式(包含校验位X):^(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
  • 说明:身份证号码可以是15位或18位数字,18位身份证号码的最后一位可能是数字或大写字母X(代表10)。

5. 帐号合法性校验

  • 表达式^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  • 说明:该表达式用于校验帐号是否合法,要求以字母开头,长度为5到16个字符,且只能包含字母、数字和下划线。

6. 密码校验

  • 表达式(基本密码):^[a-zA-Z]\w{5,17}$
  • 表达式(强密码,不含特殊字符):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$
  • 表达式(强密码,含特殊字符):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
  • 说明:密码校验表达式根据需求的不同而有所变化,基本密码要求以字母开头,长度为6到18个字符;强密码则要求必须包含大小写字母和数字的组合,且长度和是否包含特殊字符根据具体需求而定。

7. 日期格式

  • 表达式^\d{4}-\d{1,2}-\d{1,2}$
  • 说明:该表达式用于匹配常见的日期格式,如“YYYY-MM-DD”。

8. 域名

  • 表达式[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?
  • 说明:该表达式用于匹配域名,包括顶级域名和二级域名等。

9. Internet URL

  • 表达式[a-zA-z]+://[^\s]*^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
  • 说明:该表达式用于匹配Internet URL地址,支持多种协议(如http、https等)和复杂的URL结构。

10. 腾讯QQ号

  • 表达式[1-9][0-9]{4,}
  • 说明:该表达式用于匹配腾讯QQ号,腾讯QQ号从10000开始,且为纯数字。

请注意,由于正则表达式的灵活性和复杂性,上述表达式可能需要根据实际情况进行调整和修改。此外,随着技术的发展和标准的更新,一些表达式可能会变得过时或不再适用。因此,在使用这些表达式时,请务必根据最新的标准和需求进行验证和测试。

答案来自文心一言,仅供参考
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工程师老罗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值