出自:

http://www.tuicool.com/articles/vy2ymm

详解 "\\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();
}

\\s+ split替换的更多相关文章

  1. pthon入门之strip()和split()函数简单区分

    小白,分享记录学习新感悟 路飞的第一次作业写一个登录的程序,作业的升级需求中有个锁文件的需求,大致上如果用户数错了密码三次将用户写到黑名单上,下次登录锁定: ok基本的要求写完,我们上代码 usern ...

  2. PHP Deprecated: Function split() is deprecated in /var/www/html/cacti/cmd.php on line 61

    [root@localhost cacti]# php cmd.php PHP Deprecated: Function split() is deprecated in /var/www/html/ ...

  3. js比较版本号

    比较版本v2.2.3和2.1.15大小 //假定字符串的每节数都在5位以下 function toNum(a){ var a=a.toString(); //也可以这样写 var c=a.split( ...

  4. js 几个特殊情况

    alert(033-15);//12,前缀0用在直接量中,表示八进制 alert('033'-15);//18,前缀0用在字符串中,在(隐式)转换将忽略 alert(parseInt('033')-1 ...

  5. python 多窗口编辑

    同时打开多个文件: 1,vim filename1 filename2 在打开的多个文件中 :next 转到下个文件中 :prev 转到上个文件中 :last/:first 分别到最后一个和第一个文件 ...

  6. Python-正则复习-56

    # 正则表达式# 字符组 [字符]# 元字符 # \w \d \s # \W \D \S # . 除了换行符以外的任意字符 # \n \t # \b # ^ $ 匹配字符串的开始和结束 # () 分组 ...

  7. Go代码重构:23倍的性能爆增

    几周前,我读了一篇名为“ Good Code vs Go Code中的错误代码 ”的文章,作者指导我们逐步完成实际业务用例的重构. 本文的重点是将“坏代码”转变为“良好代码”:更具惯用性,更易读,利用 ...

  8. python基础知识点三

    内置函数和匿名函数 python 一共有68个内置的函数:它们就是python提供给你直接可以拿来使用的所有函数 内置函数的图:链接 :https://www.processon.com/mindma ...

  9. logging/re - 总结

    logging 模块 很多程序都有记录日志的需求 logging的日志可以分为 debug(), info(), warning(), error() and critical()5个级别 1.输出到 ...

随机推荐

  1. 【CCF】炉石传说 模拟

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...

  2. python网络

    try: import urllib.request as urllib2 except ImportError: import urllib2 response = urllib2.urlopen( ...

  3. vmware虚拟机无法ping通主机,也无法联网

  4. 使用docker-maven-plugin插件构建docker镜像(已过时)

    可以参考博客:https://blog.csdn.net/aixiaoyang168/article/details/77453974 docker-maven-plugin官网推荐在新项目中使用do ...

  5. Android使用圆角

    圆角Button 效果图 绿色Button 定义button_green.xml资源文件位于drawable文件夹下,可用作button的background属性 button_green.xml: ...

  6. Python 函数的一般形式及参数

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/01 21:46 # @Author : lijunjiang # @Fi ...

  7. 【转】重装Ubuntu时如何保留/home分区中的数据

    Windows系统可以在重装时只格式化C盘,从而保留其他分区的数据. Ubuntu系统也可以,只要在安装系统时分出一个/home分区.你可以把Ubuntu的“/”分区看为Windows的C盘,重装Ub ...

  8. js中click重复执行

    问题背景:在写一个非常简单添加方法的时候,用onclick事件调用添加方法,点击第一次没问题,第二次会重复执行,经过多次查找资料得知这个状况的解决方案,特意总结一下: 代码如下:点击#spec_for ...

  9. Java IO 学习(零)概述

    参考文献 Doug Lea的  <Scalable IO in Java> Java NIO trick and trap IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇) 网络编程释疑 ...

  10. Shell 括号辨识(转http://blog.csdn.net/taiyang1987912/article/details/39551385)

    一.小括号,圆括号() 1.单小括号 ()    ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有 ...