黑马程序员技术交流社区
标题:
关于正则表达式获取的问题?
[打印本页]
作者:
David.L
时间:
2014-8-22 10:35
标题:
关于正则表达式获取的问题?
在做小练习时,能写出了标准答案:方法一
然后还考虑测试下获取的方法:于是写了方法二,只是自己做下测试
结果发现了问题
方法二中,不论
reg="(.)\\1+";
reg="(.)\\1+{0,2}";
reg="\\b(.)\\1+\\b";
都是输出0,也就是m.find()为false,未找到匹配
为什么呢?
/*
*/
import java.util.regex.*;
class RegexTest
{
public static void main(String[] args)
{
test_1();
}
/*
需求:
将下列字符串转成:我要编程。
到底用四种功能中哪一个?或者哪几个?
思路:
1,如果只想知道该字符对错,使用匹配。
2,想要将已有的字符串变成另一个字符串,替换。
3,想要按照自定的方式将字符串变成多个字符串,切割。获取规则以外的子串。
4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。
*/
public static void test_1()
{
String str="我我...我我...我要..要要...学学学...学学...编编编...编程...程.程程程...程...程";
/*方法一,标准方法
将已有字符串变成另一个字符串。使用替换功能。
1,可以先将.去掉。
2,再将多个重复的内容变成单个内容。
*/
/*
String reg="\\.+";
str=str.replaceAll(reg,""); //两句可以简化成一句
reg="(.)\\1+";
str=str.replaceAll(reg,"$1");
sop(str);
*/
//方法二
String reg="(.)\\1+{0,2}";
Pattern p=Pattern.compile(str);
Matcher m=p.matcher(reg);
sop("0");
while(m.find())
{
sop("1");
String s=m.group();
sop(s);
sop("2");
if(s.equals("\\."))
{
sop("3");
continue;
}
sop(s);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
作者:
思维
时间:
2014-8-22 10:35
我发现你的格式写错了!仔细看下API。
①Pattern p =Pattern.compile(reg);
②Matchr m = p.matcher(str);
作者:
思维
时间:
2014-8-22 11:10
我是过来收藏你的帖子的:)我也遇到同样问题了
作者:
Louis.hui
时间:
2014-8-22 11:22
来看一下题
作者:
思维
时间:
2014-8-22 11:40
本帖最后由 思维 于 2014-8-22 11:51 编辑
我再给你发一段代码,看我的结果你就应该知道了,你的方法二的匹配是对字符串的整体进行匹配,而不是局部分别匹配,所以当你匹配到“我”都后面的“.”时,就不再和“我”重复了,所以返回false。
import java.util.regex.*;
class Test{
public static void main(String[] args){
String str="我我我要要要学学学编编编程程程";
String str1="aaaabbbbccccdddd";
String str2="aaaaaaaaaaaaaaaaa";
String reg="(.)\\1+";
System.out.println(str.matches(reg));
System.out.println(str1.matches(reg));
System.out.println(str2.matches(reg));
String strReplace=str.replaceAll("(.)\\1+","$1");
System.out.println(strReplace);
String str1Replace=str1.replaceAll("(.)\\1+","$1");
System.out.println(str1Replace);
/*结果:false false true
我要学编程 abcd
*/
}
}
复制代码
作者:
David.L
时间:
2014-8-22 12:21
思维 发表于 2014-8-22 11:40
我再给你发一段代码,看我的结果你就应该知道了,你的方法二的匹配是对字符串的整体进行匹配,而不是局部分 ...
匹配的我了解,呵呵
你前面说对了
最简单的笔误
。。。。自己看了半天没看出来
。。。就说我表达式没错,。。。晕死了 谢谢~
作者:
逍遥客
时间:
2014-8-23 08:40
额,哈哈哈
作者:
wzningjie
时间:
2014-8-23 09:39
是这样的~~,二楼正解
作者:
inception
时间:
2014-8-23 19:59
看看。。。
作者:
︶ㄣ你眼中的倒
时间:
2014-8-24 08:28
来看看!!!!!!!!!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2