本来虽然也看过一些正则表达式的用法/ 但是对于有些需求还是不知道从何下手。
现在工作中,遇到一个问题,求一正则表达式!需求:
010003000000000对于上面的一个字符窜,每3个 0 为一组, 从后面往前开始遍历,直到发现 某一组的3个数里面有一个不是0,那么遍历结束,返回这一组以前的所有数字对于上例,去掉 最后3组最后9个0之后, 结果为 010003另外再举个例子
000010003000000000, 去掉 最后3组最后9个0之后, 结果为 000010003最后, 其实对于到底每几个 0 为一组,最好还可以随意设置,比如,我可以要 4个0 为一组,可以要5个零为一组。
这样的正则表示式怎么写? 有没有人能给个答案,不甚感激!
现在工作中,遇到一个问题,求一正则表达式!需求:
010003000000000对于上面的一个字符窜,每3个 0 为一组, 从后面往前开始遍历,直到发现 某一组的3个数里面有一个不是0,那么遍历结束,返回这一组以前的所有数字对于上例,去掉 最后3组最后9个0之后, 结果为 010003另外再举个例子
000010003000000000, 去掉 最后3组最后9个0之后, 结果为 000010003最后, 其实对于到底每几个 0 为一组,最好还可以随意设置,比如,我可以要 4个0 为一组,可以要5个零为一组。
这样的正则表示式怎么写? 有没有人能给个答案,不甚感激!
解决方案 »
- 继承Runnable无run方法,如何跑法?
- arraylist转化成二维数组的问题
- 换个角度再再区分一下String str1 = "abc"和String str2 = new String("abc");
- 一个面试题:String s = new String("xyz");创建了几个String Object?
- 急,在线等,怎么使用js在一个页面中实现点击不同的按扭调出相应的页面
- 如何实现对象的深度序列化
- 100分求助HttpClient模拟登陆校内商业大亨问题...
- 问个数据类型里面的问题(float的范围3.4e-038 具体表示多少呢?)
- 为什么我的class不能编译.
- 请问java中有没有一个类似于messagebox或alert的API?
- 我好穷啊 没分拉
- 有关Java环境变量的困惑!
import java.util.regex.Matcher;public class Test
{
public String subtail(String str,int parm){
int len = str.length();
String regex = "[0]{"+parm+"}";
if(len<=parm){
return str;
}
boolean b = false;
do{
if(len<=parm){
return str;
}
String temp = str.substring((len-parm));
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(temp);
b = m.matches();
String what = Boolean.valueOf(b).toString();
if("true".equals(what)){
len = len - parm;
str = str.substring(0,len);
}else{
return str;
}
}while(b);
return str;
}
public static void main(String[] args){
Test t = new Test();
String result = t.subtail("020",5);
System.out.println(result);
}
};
((0{"+N+"})*)$
*/
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
为啥我运行你那正则的时候,抛运行期的异常--PatternSyntaxException啊?
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
这个case不需要考虑,业务可以保证不会全0
"((0{ "+N+ "})*)$ "
^ ^
有两个空格,删掉就好
问题找到了,直接从这copy下去的正则里面有空格
改成((0{"+N+"})*)$就没问题了还有那个数字最后一位也是空格,所以匹配的时候也没成功,哈哈to lz:
lyhk21的那个式子好用,哈哈
我知道怎么回事了,没有"禁用UBB",导致网页自动帮我添加了空格
*/
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}
晕,刚才用的是FireFox,不能插入Java Code,再试一次[code=Java]
public class Pattern2
{
public static void main(String[] args)
{
String str = "010003000000000";
final int N = 3;
String str2 = str.replaceAll("((0{"+N+"})*)$","");
System.out.println(str2);
}
}