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