非常好用的正则表达式"\\s+"
来源:互联网 发布:淘宝托管多少钱一个月 编辑:程序博客网 时间:2024/06/07 05:54
非常好用的正则表达式"\\s+" - 匹配任意空白字符
详解 "\\s+"
正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]
- \f -> 匹配一个换页
- \n -> 匹配一个换行符
- \r -> 匹配一个回车符
- \t -> 匹配一个制表符
- \v -> 匹配一个垂直制表符
而“\s+”则表示匹配任意多个上面的字符。另因为反斜杠在Java里是转义字符,所以在Java里,我们要这么用“\\s+”.
那么问题来了,“\\s+”有啥使用场景呢?
注:
[\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常用字符的简写
- manjaro linux(archlinux)alsa没有声音解决方法
- Building an MFC project for a non-Unicode character set is deprecated
- 64位arch linux keypatch 安装
- LeetCode 566.Reshape the Matrix
- Tomcat内存溢出解决方案
- 非常好用的正则表达式"\\s+"
- leetcode 200. Number of Islands DFS
- ActiveMQ中关于死信的相关配置
- Word2016中添加目录
- STM32—FMSC详解
- python decorator记录
- 面向对象简单接口
- java经典面试题(类加载和初始化顺序)
- 【干货】玩运营不可不知的经典“事件营销”案例