1、题目
2、思路
没啥意思,送的题。
完全按照(1)(2)(3)操作即可,用正则处理字符串。
(1)重复字符
(1+)*1,表示多个连续的1串。
用*表示任意个字符(包括0个),
用+表示至少一个字符,
用?表示0个或1个字符,
用{n}表示n个字符,
用{n,m}表示n-m个字符
(2)最长和最短匹配
当正则表达式中包含能接受重复的限定符时,通常的行为是贪婪匹配。
a.*b,匹配最长的,以a开始,以b结束的字符串。贪婪匹配,匹配尽可能多的字符。
a.*?b,匹配最短的,以a开始,以b结束的字符串。懒惰匹配,匹配尽可能少的字符。
(3)懒惰限定符
好喜欢正则表达式,主要是今天写代码刚用到了正则的最短匹配,这就来了个最长匹配,太好用了。
3、代码
package 网易游戏; import java.util.Scanner; /** * 整理博客,2021年9月17日23:42:22。 * */ public class Main1 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt();//数据个数 String[] arr = new String[n]; for (int i = 0; i < n; i++) { String tmp = in.nextInt() + ""; System.out.println(getys(tmp)); } //getys("99"); } public static String getys(String arr) { char[] chars = arr.toCharArray(); String[] binaryStr = {"0", "1", "10", "11", "100", "101", "110", "111", "1000", "1001"};//0~9的二进制串 StringBuilder result = new StringBuilder(); //(1) for (int i = 0; i < chars.length; i++) { result = result.append(binaryStr[chars[i] - '0']); } //(2) result.reverse();//用StringBuilder或StringBuffer的方法反转,不用写了。 String r = new String(result);//StringBuilder正则不支持,还要转为String。 r = r.replaceAll("^(0+)", "");//去掉字符串开头的所有0 //(3)连续串去重:最长匹配。 r = r.replaceAll("(1+)*1", "1"); r = r.replaceAll("(0+)*0", "0"); return r; } }
参考:
https://blog.csdn.net/u010454729/article/details/24519767
https://zhuanlan.zhihu.com/p/83080230
作者:西伯尔
出处:http://www.cnblogs.com/sybil-hxl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。