非常好用的正则表达式"\\s+"
来源:互联网 发布:乌镇互联网大会 知乎 编辑:程序博客网 时间:2024/06/03 16:27
原文http://www.cnblogs.com/jinsdu/p/4526858.html
说起来,博主使用过的正则场景虽然不多,但是就是在这当中,我发现"\\s+"真好用!
详解 "\\s+"
正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]
- \f -> 匹配一个换页
- \n -> 匹配一个换行符
- \r -> 匹配一个回车符
- \t -> 匹配一个制表符
- \v -> 匹配一个垂直制表符
而“\s+”则表示匹配任意多个上面的字符。另因为反斜杠在Java里是转义字符,所以在Java里,我们要这么用“\\s+”.
那么问题来了,“\\s+”有啥使用场景呢?
API测试中,替换测试模板中的数据
在API自动化测试中,我们经常要用xml,或者json文件,来保存API payload。 比如下面这个模板:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><userInvite><toEmail>xxxx@gmail.com</toEmail><toUserId>%s</toUserId><fromUserId>%s</fromUserId><groupId>123</groupId><inviteMetadataId>1</inviteMetadataId><status>created</status><clilentId>xxxx</clilentId><inviteProperties> <inviteProperty> <key>key</key> <value>value</value> </inviteProperty> <inviteProperty> <key>subject</key> <value>is inviting you</value> </inviteProperty></inviteProperties></userInvite>
而在测试的时候,我们就经常要替换模板中的数据,去测试API的逻辑。比如我要去掉key为subject的inviteProperty, 然后再Call这个API,怎么办呢?
OK,答案很明显,我们只要替换他们就可以了,而这时候\\s+就可以派上用场了。
比如我们可以直接将其替换成空格:
payload.replaceFirst("<inviteProperty>\\s+<key>subject</key>\\s+<value>is inviting you</value>\\s+</inviteProperty>", "");
这里的\\s+可以替换掉关键字之间的所有空白字符。
\\s+在经典算法题:单词反转中的使用
有这么一个经典算法题:
输入一串字符,然后按着单词倒叙输出比如:输入 "the sky is blue",输出 "blue is sky the".
这题如果使用String的Split方法就非常方便,我们可以根据空格把字符串分成单词数组,这样就可以倒着输出单词就可以了。
但是如果单纯的使用空格就会有很多缺陷,比如:
s.trim().split(" ");
如果输入为这样就会有问题 “a b”,用上面的代码,我们就会分拆出下面的结果:
最后分解出了四个元素!
很明显跟我们的预期不一样,我们希望是只剩两个单词,所以如果使用\\s+,一切就完美多了!
最后给出完整算法解决方案:
public static String reverseWords(String s){ String[] wordsArray = s.trim().split("\\s+"); StringBuilder result = new StringBuilder(); for(int i = wordsArray.length - 1; i >= 0 ; i--) { if(i == 0) { result.append(wordsArray[i]); } else { result.append(wordsArray[i] + " "); } } return result.toString();}
总结
啥也不说了,何不试试呢?
阅读全文
0 0
- 非常好用的正则表达式"\\s+"
- 非常好用的正则表达式"\\s+"
- 非常好用的iOS正则表达式
- java使用replaceAll的正则表达式替换,非常好用
- 非常好的正则表达式学习文章
- Java正则表达式教程(非常好)
- 一个非常好用的正则表达式替换字符串包含的域名
- 正则表达式 :(?s)(?i) ?: 表示的意思
- 正则表达式的应用 String.split("ECONFUNC//(//s*//w*//s*,//s*//d*//s*,//s*//w*//s*//)");
- 正则表达式"\\s+"
- 正则表达式:(\s*)[\s*]{\s*} 区别
- 正则表达式:(?m)(\\S+)\\s+((\\S+)\\s+(\\S+))$
- 转载网上非常好的正在表达式教程
- 实现去除字符串两端空白(相当于trim)功能的正则表达式/^/s*((.|/n)*/S)?/s*$/
- HP正则表达式后面接的/isU, /is, /s是什么意思?
- PHP 正则表达式后面接的/isU, /is, /s含义
- 正则表达式中\b跟\s的或运算
- 正则表达式 \w \d . \s常用字符的简写
- 开个公众号 大数据务虚杂谈 ;)
- leetcode-461(Hamming Distance)
- androd stdio 编写蓝牙通信程序
- 【转载】JPush Android 推送如何区分开发、生产环境
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 Problem E: qwb和李主席 (折半枚举!!!!n堆数分成最接近的两堆!!
- 非常好用的正则表达式"\\s+"
- 斐波那契数列
- 解决sublime下再次运行node,端口被占用无法再次运行问题
- 欢迎使用CSDN-markdown编辑器
- 将SQLServer表直接导入Oracle数据库(图文教程)
- Windows下利用osm2pgsql将OSM数据导入到Postgres中的方法
- 如何用C语言封装 C++的类,在 C里面使用
- svn查看某个时间段的日志信息
- 找不到localhost的网页错误怎么办?