Java正则表达式 实例
文件内容丢失
来解释一下这个(.)\\1+
正则表达还是的意思,
(.)
:捕获一个任意字符\1
反向引用,表示前面捕获的字符+
表示前面的字符出现1此或多次
这句话的意思就是,匹配两个或者两个以上的重复的字符
然后$1
表示第一个捕获组中的内容,也就是捕获到的这个字符。
所以temp.replaceAll("(.)\\1+", "$1");
这句话的意思就是,把temp字符串中两个或者两个以上的重复字符替换成该字符本身,换句话说就是删除所有重复到的字符。
对IP地址进行排序
原文:https://blog.csdn.net/sinat_36713319/article/details/53463120
1 | public static void sortIPAddress() |
运行结果:
1 | ip地址:-->00192.00168.001.00200 0010.0010.0010.0010 0010.0010.0010.0011 0011.0010.0010.0010 003.003.0050.003 00127.000.000.001 |
- 首先来看
temp.replaceAll("(\\d+)", "00$1");
这句,(\\d+)
将捕获到ip
地址中除了点号之外的所有数字串,因为ip地址每一位可以是1位数,2位数,3位数,这里先不管使用00$1
进行替换,这样每一位就是3位数到5位数。 temp.replaceAll("0+(\\d{3})", "$1");
这句,首先\d{3}
表示正好匹配3
位数,0+
一个或者多个0
,0+(\\d{3})
这个表达式的意思就是,匹配多个0开头,然后后面正好有3
位数,把这3
位数捕获出来,temp.replaceAll("0+(\\d{3})", "$1");
这句话的意思就是捕获最后的3位数,然后用这3
位数,替换掉原来的3到5位的数
- 经过上面两步之后,所有的
ip
地址都会变成3
位数表示的,不足的前面会补0
,这样转换的好处就是可以方便的使用Array.sort()
方法对这些字符串进行排序。 - 注意排序后的字符,都是我们
高位补0
后的ip
地址这与平时的ip
地址表示方式不同所以,要把高位的0去掉。 ips.replaceAll("0+(\\d+)", "$1")
这句话实现去掉高位的0
,高位的0不会被捕获到,高位的0
不包含在捕获组$1
,这样在进行替换的时候就等于删除了高位的0
小结
**使用替换进行删除或添加元素,就是拿出来又放回去
**,如果少放了就相当于删除一部分了,如果多方了就是新增了一部分。
- 替换删除,
以少换多
:我们匹配较多的字符,然后只捕获其中较少的一部分,再用捕获到的少量字符替换匹配的较多的字符,这样就等同于删除掉那些没有捕获的部分。这就好比从果篮里拿出几个水果,例如拿出苹果和香蕉,然后我再把苹果放回去,香蕉丢掉。这样果篮里的香蕉就没有了,相当于被删除掉了。 - 替换添加,
以多换少
:我么匹配较少的字符,并且捕获这些字符,然后捕获到的字符加上一些新的字符替换回去。这样等效于添加了字符。例如我现在只拿出雪梨,然后我变出一个芒果,然后雪梨和芒果一起放回果篮里,这样果篮里就多出了一个芒果,而雪梨还是原来的雪梨。