java 板


LINE

Apache Commons 有蠻多小工具的 :) 自己寫雖然不算難, 不過別人都寫好了也考慮了很多例外的狀況 像一個讀取文字檔成為字串的小工具 public class CommonsIoTest extends TestCase { public static String readFromFile(File file, String enc) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); InputStream in = new BufferedInputStream(new FileInputStream(file)); int c = 0; while((c=in.read())!=-1){ out.write(c); } return new String(out.toByteArray(), enc); } public void testReadFile() throws Exception { File file = new File(CommonsIoTest.class.getResource( "CommonsIoTest.java").getFile()); String text1 = CommonsIoTest.readFromFile(file, "utf-8"); String text2 = FileUtils.readFileToString(file, "utf-8"); assertEquals(text1, text2); } } 即使自己寫(先不考慮最佳化), 也不算困難. 但是因為 Commons 提供了一堆小工具, 我們可以簡單以一行來達成 而且這些 library 都是大家能取得的, 下面介紹一些我自己常用到的類別: ============================================================= public class CommonsLangTest extends TestCase { String[] array = { "a", "b", "o", "d", "c", "e" }; /** * 找索引 */ public void testArrayIndex() throws Exception { int idx = -1; for (int i = 0; i < array.length; i++) { if ("b".equals(array[i])) { idx = i; break; } } assertEquals(idx, ArrayUtils.indexOf(array, "b")); } /** * 增加元素 */ public void testArrayAdd() throws Exception { String newElement = "orz"; String[] newArray = new String[array.length + 1]; System.arraycopy(array, 0, newArray, 0, array.length); newArray[newArray.length - 1] = newElement; // 因為 Array Object 沒有覆寫 equals, hashCode 先轉成 String 再比較 // assertEquals(newArray, ArrayUtils.add(array, "orz")); assertEquals(ArrayUtils.toString(newArray), ArrayUtils .toString(ArrayUtils.add(array, "orz"))); } /** * 刪除索引位置的元素 */ public void testArrayRemoveByIndex() throws Exception { int index = 3; String[] newArray = new String[array.length - 1]; System.arraycopy(array, 0, newArray, 0, index); System.arraycopy(array, index + 1, newArray, index, newArray.length - index); assertEquals(ArrayUtils.toString(newArray), ArrayUtils .toString(ArrayUtils.remove(array, index))); } /** * 找出元素並刪除 */ public void testArrayRemoveByElement() throws Exception { int index = -1; for (int i = 0; i < array.length; i++) { if ("o".equals(array[i])) { index = i; break; } } String[] newArray = new String[array.length - 1]; System.arraycopy(array, 0, newArray, 0, index); System.arraycopy(array, index + 1, newArray, index, newArray.length - index); assertEquals(ArrayUtils.toString(newArray), ArrayUtils .toString(ArrayUtils.removeElement(array, "o"))); } /** * 判斷空白字串 */ public void testStringIsBlank() throws Exception { String str1 = null; String str2 = " "; String str3 = " \r \r\n "; assertTrue(StringUtils.isBlank(str1)); assertTrue(str1 == null || "".equals(str1.trim())); assertTrue(StringUtils.isBlank(str2)); assertTrue(str2 == null || "".equals(str2.trim())); assertTrue(StringUtils.isBlank(str3)); assertTrue(str3 == null || "".equals(str3.trim())); } /** * 判斷字串是否是數值 */ public void testStringIsNumeric() throws Exception { assertTrue(StringUtils.isNumeric("1234")); // 有小數的不行 :) assertFalse(StringUtils.isNumeric("456.3")); } /** * 判斷字串是否是數值 */ public void testNumber() throws Exception { assertTrue(NumberUtils.isDigits("12345")); assertFalse(NumberUtils.isDigits("12345L")); assertTrue(NumberUtils.isNumber("12345L")); assertTrue(NumberUtils.isNumber("3e003")); } /** * 字串反轉 */ public void testStringReverse() throws Exception { assertEquals(StringUtils.reverse("123456789"), "987654321"); assertEquals(new StringBuffer("123456789").reverse().toString(), "987654321"); } /** * 製作隨機字串 */ public void testRandomString() throws Exception { int len = 10; StringBuffer buf = new StringBuffer(); List chars = Arrays.asList(ArrayUtils.toObject("0123456789abcdef" .toCharArray())); while (len-- > 0) { Collections.shuffle(chars); buf.append(chars.get(0)); } // 產生長度 10 的字串 String str1 = RandomStringUtils.random(10, "0123456789abcdef"); assertEquals(10, str1.length()); assertEquals(10, buf.toString().length()); System.out.println(str1); System.out.println(buf.toString()); } /** * 處理特殊字元 */ public void testEscape() throws Exception { String escapedHtml = StringEscapeUtils.escapeHtml("<中文/>"); String escapedSQL = StringEscapeUtils.escapeSql("' OR 1=1 UNION * "); String escapedXml = StringEscapeUtils.escapeXml("<x> a < b </x>"); assertEquals(escapedHtml, "&lt;&#20013;&#25991;/&gt;"); assertEquals(escapedSQL, "'' OR 1=1 UNION * "); assertEquals(escapedXml, "&lt;x&gt; a &lt; b &lt;/x&gt;"); } /** * 格式化日期 */ public void testDateFormat() throws Exception { Date now = new Date(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd a K:h", Locale.TAIWAN); df.format(now); System.out.println(df.format(now)); assertEquals(df.format(now), DateFormatUtils.format(now, "yyyy-MM-dd a K:h", Locale.TAIWAN)); } /** * 由字串轉 Locale */ public void testLocale() throws Exception { assertEquals(LocaleUtils.toLocale("zh_TW"), Locale.TAIWAN); } /** * 布林判斷 */ public void testBoolean() throws Exception { String str = null; assertFalse(BooleanUtils.toBoolean(str)); assertFalse(BooleanUtils.toBoolean("false")); assertFalse(BooleanUtils.toBoolean("x gti")); assertFalse(BooleanUtils.toBoolean("nO")); assertTrue(BooleanUtils.toBoolean("yEs")); assertTrue(BooleanUtils.toBoolean("tRUe")); assertTrue(BooleanUtils.toBoolean("TRUE")); assertTrue(BooleanUtils.toBoolean("true")); assertTrue(BooleanUtils.xor(new boolean[] { true, false })); assertFalse(BooleanUtils.xor(new boolean[] { false, false })); assertFalse(BooleanUtils.xor(new boolean[] { true, true })); } } --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.80.216 ※ 編輯: qrtt1 來自: 220.133.80.216 (01/04 23:22)
1F:推 ellinas:感謝分享 我不知道他有這麼多小功能 01/08 21:59







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP