• \s+ split替换


    出自:

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

    详解 "\s+"

    正则表达式中s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ f v]

    • f -> 匹配一个换页
    • -> 匹配一个换行符
    • -> 匹配一个回车符
    • -> 匹配一个制表符
    • 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();
    }
  • 相关阅读:
    广搜 BFS()
    最短路-A
    DFS-C
    codeforces contest
    小技巧
    将博客搬至CSDN
    建树
    codeforces gym102411 Equidistant(图论+乱搞)
    codeforces 1250N wires(简单图论)
    Splay 树
  • 原文地址:https://www.cnblogs.com/newcoder/p/5765495.html
Copyright © 2020-2023  润新知