源串放入string中,IP地址是有一定规则的(数字且以3个点分隔)。
希望能提供相对现成的算法描述。
谢谢。
 

解决方案 »

  1.   

    就算能够勉强做到,也会有很多的bug,例如:abdk d2.2d9(,dsf ]t5202.33.1.82yff
    而你的ip是202.33.1.8,我真的不知道你该怎么把ip拿出来!
    难道你得到的这个字符串就是这么凌乱的码???
      

  2.   

    正则表达式
    String parentString="abdk d2.2d9(,dsf ]t202.33.1.8yff";
    String regexString=".*(\\d{3}(\\.\\d{1,3}){3}).*";
    String IPString=parentString.replaceAll(regexString,"$1");
    System.out.print(IPString);
      

  3.   

    一个算法问题,可以这样考虑:先把字符串中所有的"."找出来;依次考查连续的三个".",如果它们的中间是两个整数,并且左右两边也有两个整数(都<1000),那么这个子串就是IP地址了。
      

  4.   

    beyond_xiruo的正则表达式方法太棒了!佩服
    但有点小问题,上述做法对字符串
       "abdk d2.2d9(,dsf ]t20,2.33.1.8yff"  
      IP的第一个地址前加入了逗号,就无法正确给出,可能需改动正则表达式,但我不知怎么改。我简单扩展了一下功能。使能处理上述情况且可提出多个IP地址串。代码示例: String regexString="\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
     Pattern p = Pattern.compile(regexString);
     String parentString="abdk d2.2d9(,dsf ]t20,2.33.1.8yff";
     Matcher m = p.matcher(parentString);
     boolean result = m.find();
     while(result) {
      System.out.println(m.group());
      result = m.find();
     }另外,感谢其它各位仁兄的建议。
     其中ytdmm兄的算法基本可行,但似乎稍逊正则表达式解法。谢谢。
      
      

  5.   

    你可以有indexof方法来提取第一次出现在小数点前面的三位数啊,
      

  6.   

    IP地址的第一位可不都是三个数字。可能是61.92.32.111谢谢beyond_xiruo,我准备结帖了,我给你加50分。再次感谢!
      

  7.   

    sorry,严格来说的话,IP地址最匹配的正则表达式为:
    "(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))"
      

  8.   

    beyond_xiruo好认真!
    上述正则表达式我试了试,有点问题:
     1. \.应为\\.
     2.在匹配时还有问题
       比如 串为: 
      “ ab3afd7 ([218.22.48.26])”
     
     我也考虑过严格过滤问题,但没有想出正则如何写,于是,考虑提取出IP串后,用StringTokenizer逐个分解判断<255.
     
      

  9.   

    xiruo的方法不错
    不过最后一段匹配有问题
    "(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.(\\d{1}|\\d{2}|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\\.\\d+"