replaceAll方法 替换 ip的地址

kv_zhaokc 2009-07-29 08:37:13
如何用replaceAll方法 替换ip 地址 比如 202.96.22.5 替换成 202.096.022.005
那个正则怎么写。
...全文
389 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kv_zhaokc 的回复:]
??????
第一个方法有问题呢,
如果ip的开始不足三位 添加不了0的    不如  22.96.25.3  只能得到  22.096.025.003
第二种方法就可以。  为什么呢?
[/Quote]

哈哈,不好意思。if 判断那里写错了,你把 if 子句那里两个 > 0 改成 > -1 或者 >= 0 就可以了。
kv_zhaokc 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]
Java codeimport java.util.regex.Matcher;import java.util.regex.Pattern;publicclass Test6 {publicstaticvoid main(String[] args) {
String str="222.96.22.5";// 方法 1(推荐) Pattern pattern= Pa¡­
[/Quote]


??????
第一个方法有问题呢,
如果ip的开始不足三位 添加不了0的 不如 22.96.25.3 只能得到 22.096.025.003
第二种方法就可以。 为什么呢?
kv_zhaokc 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]
Java codeimport java.util.regex.Matcher;import java.util.regex.Pattern;publicclass Test6 {publicstaticvoid main(String[] args) {
String str="222.96.22.5";// 方法 1(推荐) Pattern pattern= Pattern.compile("(?<=^|\\.)(?:(\\d{2})|(\\d))(?!\\d)");
Matcher matcher= pattern.matcher(str);
StringBuffer sb=new StringBuffer();while (matcher.find()) {if (matcher.start(1)>0) {
matcher.appendReplacement(sb,"0$1");
}elseif (matcher.start(2)>0) {
matcher.appendReplacement(sb,"00$2");
}
}
matcher.appendTail(sb);
System.out.println(sb.toString());// 方法 2 str= str.replaceAll("(?<=^|\\.)(\\d{1,2})(?!\\d)","0$1")
.replaceAll("(?<=^|\\.)(\\d{2})(?!\\d)","0$1");
System.out.println(str);
}
}
[/Quote]

嘻嘻 ,谢啦,不过 一时还没瞅太明白,在好好看看~~~
kv_zhaokc 2009-07-29
  • 打赏
  • 举报
回复
我觉得replaceAll 应该可以完成啊~~
我想的是可以分两步,先把2位的补零,在把1位的补零
我正则这样写
String regex1 = "(?=\\d{2}[\\.])"; str.replaceAll(regex1,"0"); 但是 写的不对
会把 三位的中间也补零了 比如 192 就成了 1092 。 所以想 正则该怎么改
而且我目的是为了 把放在文件里的ip换一种格式,如果把每个ip的取出来,然后split, 改完了,在把它拼接好。 效率好像不怎么样哦。
  • 打赏
  • 举报
回复
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test6 {

public static void main(String[] args) {
String str = "222.96.22.5";

// 方法 1(推荐)
Pattern pattern = Pattern.compile("(?<=^|\\.)(?:(\\d{2})|(\\d))(?!\\d)");
Matcher matcher = pattern.matcher(str);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
if (matcher.start(1) > 0) {
matcher.appendReplacement(sb, "0$1");
} else if (matcher.start(2) > 0) {
matcher.appendReplacement(sb, "00$2");
}
}
matcher.appendTail(sb);
System.out.println(sb.toString());

// 方法 2
str = str.replaceAll("(?<=^|\\.)(\\d{1,2})(?!\\d)", "0$1")
.replaceAll("(?<=^|\\.)(\\d{2})(?!\\d)", "0$1");
System.out.println(str);
}
}
dm520 2009-07-29
  • 打赏
  • 举报
回复
正则只是用来判断用的,不能该变什么,
楼上的 方法可行
cslr789 2009-07-29
  • 打赏
  • 举报
回复
方法有很多嘛,不要想着只要调用一个简单的函数就可以解决问题,如果是这样,编程也就太简单了。
想用正则表达式判断一下ip格式是否符合xxx.xxx.xxx.xxx
符合就跳过,不符合就自己的定义一个方法来处理:
按.号来截取字符串(ip),然后单独处理每个字串,判断长度是否为3,不足就补零
当然这是一种比较土的方法。
rumlee 2009-07-29
  • 打赏
  • 举报
回复
这好像用正则不一定能够做到吧,可能需要截开之后每个单独处理,正则好像处理不了。也许是我不会,期待高人。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧