栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Java正则表达式删除字符串中的所有其他字符

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Java正则表达式删除字符串中的所有其他字符

您确实非常接近答案:只需将匹配第二个字符作为可选字符即可。

String s = "1a2b3c4d5";System.out.println(s.replaceAll(".(.)?", "$1"));// prints "abcd"

之所以有效,是因为:

  • 正则表达式默认是贪婪的,如果有则使用第二个字符
    • 当输入的长度为奇数时,第二个字符将在最后一次替换时不存在,但您仍将匹配一个字符(即输入中的最后一个字符)
  • 即使组不匹配,您仍然可以使用反向引用进行替换
    • 它将替换为空字符串,而不是
      "null"
    • 这与不同
      Matcher.group(int)
      ,后者会
      null
      为失败的组返回

参考文献

  • regular-expressions.info/可选

仔细看看第一部分

让我们仔细看看作业的第一部分:

String s = "1a2b3c4d5";System.out.println(s.replaceAll("(.).", "$1"));// prints "12345"

在这里,您不必使用

?
第二个字符,但是它“有效”,因为即使您不匹配最后一个字符, 也不必使用!
由于问题说明,最后一个字符可以保持不匹配,无法替换的状态。

现在假设我们要删除索引为1,3,5 …的字符,并将索引为0,2,4 …的字符放在方括号中。

String s = "1a2b3c4d5";System.out.println(s.replaceAll("(.).", "($1)"));// prints "(1)(2)(3)(4)5"

哈!现在,您在使用奇数长度输入时遇到了完全相同的问题!您无法将最后一个字符与您的正则表达式匹配,因为您的正则表达式需要两个字符,但最后一个字符用于奇数长度输入!

同样,解决方案是使匹配第二个char为可选:

String s = "1a2b3c4d5";System.out.println(s.replaceAll("(.).?", "($1)"));// prints "(1)(2)(3)(4)(5)"


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/419387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号