紹語
本號主要是Java常用關鍵技術點,通用工具類的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技術分享;datax、kafka、flink等大數據處理框架的技術分享。文章會不斷更新,歡迎碼友關注點贊收藏轉發!
望各位碼友點擊關注,沖1000粉。后面會錄制一些視頻教程,圖文和視頻結合,比如:圖書介紹網站系統、搶購系統、大數據中臺系統等。技術才是程序猿的最愛,碼友們沖啊
如果碼友覺得代碼太長,可以從頭到尾快速掃射一遍,了解大概即可。覺得有用后再轉發收藏,以備不時之需。
正文:
Apache的StringEscapeUtils轉義工具類,主要是針對html、json、xml、js等的轉義。具體使用場景在項目中并不是很多,所以可能了解的人也比較少。
import org.apache.commons.text.StringEscapeUtils;
import org.junit.Test;
public class StringEscapeUtilsTest {
@Test
public void test() {
// 轉義html腳本和反轉義html腳本
String inputText = "<input type=\"button\" value=\"點我\"/>";
String s1 = StringEscapeUtils.escapeHtml4(inputText);
System.out.println(s1);
String s2 = StringEscapeUtils.unescapeHtml4(s1);
System.out.println(s2);
// 轉義js腳本和反轉義js腳本
String s3 = StringEscapeUtils.escapeEcmaScript("<script>alert('點我')<script>");
System.out.println(s3);
String s4 = StringEscapeUtils.unescapeEcmaScript(s3);
System.out.println(s4);
// 把字符串轉義為unicode編碼和從把unicode編碼轉義為字符串
String s5 = StringEscapeUtils.escapeJava("abc不要點我了");
System.out.println(s5);
String s6 = StringEscapeUtils.unescapeJava(s5);
System.out.println(s6);
// 轉義XML和反轉義XML
String s7 = StringEscapeUtils.escapeXml11("<name>張三</name>");
System.out.println(s7);
String s8 = StringEscapeUtils.unescapeXml(s7);
System.out.println(s8);
}
}
其他方法:
工具類源碼:
直接引入工具類的jar包即可
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.1</version>
</dependency>
和本文使用的相同功能的工具類:
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.6</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>3.0.9</version>
<type>pom</type>
</dependency>
鄙人編碼十年多,在項目中也積累了一些工具類,很多工具類在每個項目都有在用,很實用。大部分是鄙人封裝的,有些工具類是同事封裝的,有些工具類已經不記得是ctrl+c的還是自己封裝的了,現在有空就會總結項目中大部分的工具類,分享給各位碼友。如果文章中涉及的代碼有侵權行為請通知鄙人處理。
計劃是先把工具類整理出來,正所謂工欲善其事,必先利其器。項目中不管是普通單體項目還是多模塊maven項目或是分布式微服務,一部分功能模塊都是可以重用的,工具類模塊就是其中之一。
文主要講述:文件名工具類Apache之org.apache.commons.lang.StringEscapeUtils。
java中轉義是指:將某些特殊字符轉換為它在特定場景中原來的意義。
轉義字符是指無法直接顯示的字符。
常見的場景是:
1、同一字符在不同編碼中表達形式不一樣。
2、某些特定的字符在不同環境、不同語言中表達形式不一樣。
下面演示StringEscapeUtils的用法:
//轉義為Unicode編碼
String escape = StringEscapeUtils.escapeJava("古德貓寧");
輸出:\u53E4\u5FB7\u732B\u5B81
//反轉義Unicode編碼
String unescape = StringEscapeUtils.unescapeJava("\u53E4\u5FB7\u732B\u5B81");
輸出:古德貓寧
sql注入是網絡攻擊方式之一,而防止SQL注入的唯一方法是SQL參數化。
escapeSql就提供了sql轉義功能,從而實現防止sql注入。
String userId = "000001";
String sql = "select user_name from tab_emp where user_id = " + StringEscapeUtils.escapeSql("'" + userId + "'");
輸出:select user_name from tab_emp where user_id = ''000001''
//轉義為html腳本
String escapeHtml = StringEscapeUtils.escapeHtml("<div>Hello World!</div>");
輸出:<div>Hello World!</div>
//反轉義html腳本
String unescapeHtml = StringEscapeUtils.unescapeHtml("<div>Hello World!</div>");
輸出:<div>Hello World!</div>
//轉義為JS腳本
String escapeJS = StringEscapeUtils.escapeJavaScript("<script type=\"text/javascript\">alert('哈哈')<script>");
輸出:<script type=\"text\/javascript\">alert(\'\u54C8\u54C8\')<script>
//反轉義JS腳本
String unescapeJS = StringEscapeUtils.unescapeJavaScript("<script>alert(\'哈哈\')<script>");
輸出:<script>alert('哈哈')<script>
String escapeCsv = StringEscapeUtils.escapeCsv("He said \"'I love you'\"");
輸出:"He said ""'I love you'"""
String unescapeCsv = StringEscapeUtils.unescapeCsv("\"He said \"\"'I love you'\"\"\"");
輸出:He said "'I love you'"
注于Java領域優質技術,歡迎關注
作者:alterem
在Java中,工具類定義了一組公共方法,這篇文章將介紹Java中使用最頻繁及最通用的Java工具類。以下工具類、方法按使用流行度排名,參考數據來源于Github上隨機選取的5萬個開源項目源碼。
closeQuietly:關閉一個IO流、socket、或者selector且不拋出異常,通常放在finally塊
toString:轉換IO流、 Uri、 byte[]為String
copy:IO流數據復制,從輸入流寫到輸出流中,最大支持2GB
toByteArray:從輸入流、URI獲取byte[]
write:把字節. 字符等寫入輸出流
toInputStream:把字符轉換為輸入流
readLines:從輸入流中讀取多行數據,返回List<String>
copyLarge:同copy,支持2GB以上數據的復制
lineIterator:從輸入流返回一個迭代器,根據參數要求讀取的數據量,全部讀取,如果數據不夠,則失敗
deleteDirectory:刪除文件夾
readFileToString:以字符形式讀取文件內容
deleteQueitly:刪除文件或文件夾且不會拋出異常
copyFile:復制文件
writeStringToFile:把字符寫到目標文件,如果文件不存在,則創建
forceMkdir:強制創建文件夾,如果該文件夾父級目錄不存在,則創建父級
write:把字符寫到指定文件中
listFiles:列舉某個目錄下的文件(根據過濾器)
copyDirectory:復制文件夾
forceDelete:強制刪除文件
isBlank:字符串是否為空 (trim后判斷)
isEmpty:字符串是否為空 (不trim并判斷)
equals:字符串是否相等
join:合并數組為單一字符串,可傳分隔符
split:分割字符串
EMPTY:返回空字符串
trimToNull:trim后為空字符串則轉換為null
replace:替換字符串
toString:把Entity轉換為字符串
consume:確保Entity中的內容全部被消費。可以看到源碼里又一次消費了Entity的內容,假如用戶沒有消費,那調用Entity時候將會把它消費掉
toByteArray:把Entity轉換為字節流
consumeQuietly:和consume一樣,但不拋異常
getContentCharset:獲取內容的編碼
五. org.apache.commons.lang3.StringUtils
isBlank:字符串是否為空 (trim后判斷)
isEmpty:字符串是否為空 (不trim并判斷)
equals:字符串是否相等
join:合并數組為單一字符串,可傳分隔符
split:分割字符串
EMPTY:返回空字符串
replace:替換字符串
capitalize:首字符大寫
getExtension:返回文件后綴名
getBaseName:返回文件名,不包含后綴名
getName:返回文件全名
concat:按命令行風格組合文件路徑(詳見方法注釋)
removeExtension:刪除后綴名
normalize:使路徑正常化
wildcardMatch:匹配通配符
seperatorToUnix:路徑分隔符改成unix系統格式的,即/
getFullPath:獲取文件路徑,不包括文件名
isExtension:檢查文件后綴名是不是傳入參數(List<String>)中的一個
hasText:檢查字符串中是否包含文本
hasLength:檢測字符串是否長度大于0
isEmpty:檢測字符串是否為空(若傳入為對象,則判斷對象是否為null)
commaDelimitedStringToArray:逗號分隔的String轉換為數組
collectionToDelimitedString:把集合轉為CSV格式字符串
replace 替換字符串
7. delimitedListToStringArray:相當于split
uncapitalize:首字母小寫
collectionToDelimitedCommaString:把集合轉為CSV格式字符串
tokenizeToStringArray:和split基本一樣,但能自動去掉空白的單詞
contains:是否包含某字符串
addAll:添加整個數組
clone:克隆一個數組
isEmpty:是否空數組
add:向數組添加元素
subarray:截取數組
indexOf:查找某個元素的下標
isEquals:比較數組是否相等
toObject:基礎類型數據數組轉換為對應的Object數組
參考十五:org.apache.commons.lang3.StringEscapeUtils
format:格式化參數,返回一個HTTP POST或者HTTP PUT可用application/x-www-form-urlencoded字符串
parse:把String或者URI等轉換為List<NameValuePair>
md5Hex:MD5加密,返回32位字符串
sha1Hex:SHA-1加密
sha256Hex:SHA-256加密
sha512Hex:SHA-512加密
md5:MD5加密,返回16位字符串
isEmpty:是否為空
select:根據條件篩選集合元素
transform:根據指定方法處理集合元素,類似List的map()
filter:過濾元素,雷瑟List的filter()
find:基本和select一樣
collect:和transform 差不多一樣,但是返回新數組
forAllDo:調用每個元素的指定方法
isEqualCollection:判斷兩個集合是否一致
contains:是否包含某個字符串
addAll:添加整個數組
clone:克隆一個數組
isEmpty:是否空數組
add:向數組添加元素
subarray:截取數組
indexOf:查找某個元素的下標
isEquals:比較數組是否相等
toObject:基礎類型數據數組轉換為對應的Object數組
getProperty:獲取對象屬性值
setProperty:設置對象屬性值
getPropertyDiscriptor:獲取屬性描述器
isReadable:檢查屬性是否可訪問
copyProperties:復制屬性值,從一個對象到另一個對象
getPropertyDiscriptors:獲取所有屬性描述器
isWriteable:檢查屬性是否可寫
getPropertyType:獲取對象屬性類型
unescapeHtml4:轉義html
escapeHtml4:反轉義html
escapeXml:轉義xml
unescapeXml:反轉義xml
escapeJava:轉義unicode編碼
escapeEcmaScript:轉義EcmaScript字符
unescapeJava:反轉義unicode編碼
escapeJson:轉義json字符
escapeXml10:轉義Xml10
這個現在已經廢棄了,建議使用commons-text包里面的方法。
copyPeoperties:復制屬性值,從一個對象到另一個對象
getProperty:獲取對象屬性值
setProperty:設置對象屬性值
populate:根據Map給屬性復制
copyPeoperty:復制單個值,從一個對象到另一個對象
cloneBean:克隆bean實例
現在你只要了解了以上16種最流行的工具類方法,你就不必要再自己寫工具類了,不必重復造輪子。大部分工具類方法通過其名字就能明白其用途,如果不清楚的,可以看下別人是怎么用的,或者去網上查詢其用法。
另外,工具類,根據阿里開發手冊,包名如果要使用util不能帶s,工具類命名為 XxxUtils
來自:https://juejin.im/entry/5d4a25b451882505c2100241
現在人工智能非常火爆,很多朋友都想學,但是一般的教程都是為博碩生準備的,太難看懂了。最近發現了一個非常適合小白入門的教程,不僅通俗易懂而且還很風趣幽默。所以忍不住分享一下給大家。點這里可以跳轉到教程。
https://www.captainbed.net/suga
*請認真填寫需求信息,我們會在24小時內與您取得聯系。