看板 java 關於我們 聯絡資訊
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)
ellinas:感謝分享 我不知道他有這麼多小功能 01/08 21:59