OSDN Git Service

i
[luz/luz.git] / luz2 / src / com / lavans / luz2 / commons / StringUtils.java
1 /* $Id: StringUtils.java 249 2011-02-01 14:28:42Z dobashi $\r
2  * created: 2005/08/10\r
3  */\r
4 package com.lavans.luz2.commons;\r
5 \r
6 \r
7 /**\r
8  * commonsのStringUtils拡張クラス\r
9  * TODO commonsと似たようなメソッドの整理\r
10  *\r
11  * @see http://commons.apache.org/lang/api-release/index.html\r
12  * @author dobashi\r
13  */\r
14 public class StringUtils extends org.apache.commons.lang.StringUtils{\r
15         /** logger */\r
16         // private static Log logger = LogFactory.getLog(StringUtil.class.getName());\r
17 \r
18         /**\r
19          * 意味区切りアンダーバーを大文字に変換。 customer_id -> customerId.\r
20          *\r
21          * @param str\r
22          * @return\r
23          */\r
24         public static String toCamelCase(String str) {\r
25                 // check empty\r
26                 if(isEmpty(str)) return str;\r
27 \r
28                 // all letters shoud be lowered\r
29                 str = str.toLowerCase();\r
30 \r
31                 StringBuffer buf = new StringBuffer(str.length());\r
32                 String[] token = str.split("_");\r
33                 buf.append(token[0]);\r
34                 // 2語目以降は最初の文字を大文字にして追加。\r
35                 for (int i = 1; i < token.length; i++) {\r
36                         buf.append(capitalize(token[i]));\r
37                 }\r
38                 return buf.toString();\r
39         }\r
40 \r
41         /**\r
42          * 意味区切り大文字をアンダーバーに変換。 customerId -> customer_id\r
43          * 一文字目が大文字の場合は小文字にするだけ。\r
44          * @param str\r
45          * @return\r
46          */\r
47         public static String toUnderscore(String str) {\r
48                 // check empty\r
49                 if(isEmpty(str)) return str;\r
50 \r
51                 // toLower first letter.\r
52                 if(Character.isUpperCase(str.charAt(0))){\r
53                         str = uncapitalize(str);\r
54                 }\r
55 \r
56                 // change upper case to underscore\r
57                 StringBuffer buf = new StringBuffer(str.length());\r
58                 for(char ch: str.toCharArray()){\r
59                         if(Character.isUpperCase(ch)){\r
60                                 buf.append("_").append(Character.toLowerCase(ch));\r
61                         }else{\r
62                                 buf.append(ch);\r
63                         }\r
64                 }\r
65                 return buf.toString();\r
66         }\r
67 \r
68         /**\r
69          * インデント\r
70          *\r
71          * @param str\r
72          * @param indent\r
73          * @return\r
74          */\r
75         public static String indent(String str, int indent){\r
76                 StringBuffer buf = new StringBuffer(str.length());\r
77                 String[] lines = str.split("\n");\r
78                 for(String line: lines){\r
79                         buf.append(repeat("\t", indent)).append(line).append("\n");\r
80                 }\r
81 \r
82                 return buf.toString();\r
83         }\r
84 \r
85         /**\r
86          * String配列をカンマ区切り文字列に変換。クオート付き。\r
87          *\r
88          * @param list\r
89          * @param quote\r
90          *            クオート文字列\r
91          * @return\r
92          */\r
93         public static String joinQuote(String strs[], String delim, String quote) {\r
94                 StringBuffer buf = new StringBuffer();\r
95                 for (int i = 0; i < strs.length; i++) {\r
96                         if(org.apache.commons.lang.StringUtils.isEmpty(strs[i])){\r
97                                 continue;\r
98                         }\r
99                         buf.append(delim + quote + strs[i] + quote);\r
100                 }\r
101                 // 1件も無ければ空文字列\r
102                 if(buf.length()==0){\r
103                         return "";\r
104                 }\r
105                 return buf.substring(delim.length());\r
106         }\r
107 \r
108 \r
109         /**\r
110          * splitした各itemをtrim()して返す。\r
111          *\r
112          * @param list\r
113          * @return\r
114          */\r
115         public static String[] splitTrim(String str, String delim) {\r
116                 if(str==null){\r
117                         return new String[0];\r
118                 }\r
119                 String strs[] = str.split(delim);\r
120                 for (int i = 0; i < strs.length; i++) {\r
121                         strs[i] = strs[i].trim();\r
122                 }\r
123                 return strs;\r
124         }\r
125 \r
126         /**\r
127          * バイト配列を16進数の文字列にする。\r
128          *\r
129          * @param b\r
130          * @param delim\r
131          *            区切り文字":"など\r
132          * @return\r
133          */\r
134         public static String toHex(byte[] b, String delim) {\r
135                 StringBuffer buf = new StringBuffer(b.length);\r
136                 for (int i = 0; i < b.length; i++) {\r
137                         int c = b[i] & 0xFF;\r
138                         String hex = Integer.toHexString(c);\r
139                         if (hex.length() == 1)\r
140                                 hex = "0" + hex;\r
141                         buf.append(delim + hex);\r
142                 }\r
143 \r
144                 return buf.substring(delim.length());\r
145         }\r
146 \r
147         /**\r
148          * 16進数テキストをバイト配列に変換する。 toHex()の逆。\r
149          *\r
150          * @param str\r
151          * @param delim\r
152          * @return\r
153          */\r
154         public static byte[] toByte(String str, String delim) {\r
155                 int tokenLength = 2 + delim.length();\r
156                 byte[] b = new byte[(str.length() + delim.length()) / tokenLength];\r
157                 for (int i = 0; i < b.length; i++) {\r
158                         b[i] = (byte) Integer.parseInt(str.substring(i * tokenLength, i * tokenLength + 2), 16);\r
159                 }\r
160 \r
161                 return b;\r
162         }\r
163 }\r