\\s+ split替換


出自:

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(); }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM