6翻了(正则表达式)

例题

666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!

本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。

输入格式:

输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。

输出格式:

从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。

输入样例:

it is so 666 really 6666 what else can I say 6666666666

输出样例:

it is so 666 really 9 what else can I say 27

 分析:看到这题,首先想到的是替换,但是如果单纯的替换,那就是查找有点麻烦,因为那个要查找的字符会改变,不好查找。这是,我们就可以用正则表达式。


正则表达式

正则表达式的语法:使用元字符进行排序组合用来匹配字符串,在线测试网站有

编程胶囊     OSCHINA

下面说一下正则表达式的主要字符的作用

1.元字符:

  • . 匹配除换行符以外的任意字符
  • \w 匹配字母或数字或下划线
  • \s 匹配任意的空白符
  • \d 匹配数字
  • \n 匹配一个换行符
  • \t 匹配一个制表符
  • ^ 匹配一个字符串的开始
  • $ 匹配字符串的结尾
  • \w 匹配非字母或者数字或者下划线
  • \D 匹配非数字
  • \S 匹配非空白符
  • a|b 匹配字符a或者字符b
  • ()匹配括号内的表达式,也表示一个组
  • [...] 匹配字符组中的字符
  • [^...] 匹配除了字符组中的字符的所有字符

2.量词(控制前面的元字符出现的次数):

* 重复零次或则多次

+ 重复一次或者更多次

? 重复零次或者一次

{n} 重复n次

{n,} 重复n次或者更多次

{n,m}重复n到m次

3.贪婪匹配和惰性匹配

.* 贪婪匹配(最大限度匹配字符)

.*? 惰性匹配(最小限度匹配字符)

代码实现:

package day13;
import java.util.Scanner;
/*
it is so 666 really 6666 what else can I say 6666666666
it is so 666 really 9 what else can I say 27
 */
public class test1 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String str=sc.nextLine();
//运用正则表达式,进行查找替换
        str=str.replaceAll("6{9}6","27");
        str=str.replaceAll("6{3}6","9");
        System.out.println(str);

    }
}

注意:这里用的是正则表达式,先要替换更多字符的6。如果是先替换超过三个6的字符,会把后面的6也个替换了,你可以试试把那两句替换语句换一下位置,就知道问题了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值