A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ㄗ灬Night|K 中级黑马   /  2013-10-19 22:11  /  917 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ㄗ灬Night|K 于 2013-10-20 12:44 编辑

程序结果:
2.2.2.2
10.10.10.10
192.168.1.1
255.255.255.0
如果将程序28行替换为29行,打印结果的第二行应该不满足([1-9]+)这个条件啊,为什么还会打印出结果呢;还有就是两次结果最后一行不一样是为什么啊?
  1. import java.util.TreeSet;
  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;


  4. public class TelRegTest {


  5.         public static void main(String[] args) {
  6.                
  7.                
  8.                 String ip = "192.168.1.1 255.255.255.0 10.10.10.10 2.2.2.2";
  9.                 ip = ip.replaceAll("(\\d+)", "00$1");
  10.                 System.out.println(ip);
  11.                
  12.                 ip=ip.replaceAll("0*(\\d{3})", "$1");
  13.                 System.out.println(ip);
  14.                
  15.                 String[] str = ip.split(" ");
  16.                 TreeSet<String> ts = new TreeSet<String>();
  17.                 for(String s : str){
  18.                         
  19.                         ts.add(s);
  20.                 }
  21.                
  22.                 for(String ss : ts){
  23.                                        
  24.                         System.out.println(ss.replaceAll("0*(\\d+)", "$1"));
  25.                         //System.out.println(ss.replaceAll("0*([1-9]+)", "$1"));
  26.                 }
  27.                
  28.                
  29.                 }
  30.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
本帖最后由 hyz123456 于 2013-10-20 08:11 编辑

就算不满足条件,但是你输出语句摆在那里,也会输出的啊,
只不过是满足的地方给你replace了,不满足的就照原样输出了呗。
  1. import java.util.regex.*;
  2. import java.util.*;
  3. public class testRegex {
  4.         public static void main(String[] args)
  5.         {
  6.                 String st = "001999jhk.00100";
  7.                 String regex1 = "0*([0-9])+";
  8.                 String regex2 = "0*([1-4])+";
  9.                 System.out.println(st.matches(regex2));
  10.                 System.out.println(st.replaceAll(regex2,"$1"));  
  11.         }
  12. }
复制代码
输出结果是:
false
1999jhk.100
在这里replace相当于遍历字符串,把符合你条件的地方修改了。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马