设为首页 收藏本站
查看: 958|回复: 0

[经验分享] Apache Commons Lang 包(包括SerializationUtils,ToStringBuilder,EqualsBuilder,HashCod

[复制链接]

尚未签到

发表于 2015-7-30 15:39:47 | 显示全部楼层 |阅读模式
Apache Commons Lang 包是用来处理Java基本对象方法的工具类包,可以简化很多平时经常要用到的写法。比如:


  • SerializationUtils类:为序列化工具类,也是lang包下的工具,主要用于序列化操作,同时提供对象克隆接口
  • ToStringBuilder类:功能就是在自己定义一个类的toString 方法时,方便的格式化类的属性。ToStringBuilder类中的append方法可以向该类添加基本类型、数组和对象 ,只有添加的方法才会被toString方法输出。ToStringStyle类则是对输出的内容进行格式化。
  • EqualsBuilder与HashCodeBuilder类:可以简化Java类中equals与hashCode方法的改写过程。
  
  下面是一个使用了各个工具的小例子:
  



  1 import java.io.File;  
  2  import java.io.FileInputStream;  
  3  import java.io.FileNotFoundException;  
  4  import java.io.FileOutputStream;  
  5  import java.io.IOException;  
  6  import java.util.Calendar;  
  7  import java.util.Date;  
  8  import java.util.Iterator;  
  9   
10  import org.apache.commons.lang3.ArrayUtils;  
11  import org.apache.commons.lang3.CharSet;  
12  import org.apache.commons.lang3.CharSetUtils;  
13  import org.apache.commons.lang3.ClassUtils;  
14  import org.apache.commons.lang3.ObjectUtils;  
15  import org.apache.commons.lang3.RandomStringUtils;  
16  import org.apache.commons.lang3.SerializationUtils;  
17  import org.apache.commons.lang3.StringEscapeUtils;  
18  import org.apache.commons.lang3.StringUtils;  
19  import org.apache.commons.lang3.SystemUtils;  
20  import org.apache.commons.lang3.Validate;  
21  import org.apache.commons.lang3.builder.EqualsBuilder;  
22  import org.apache.commons.lang3.builder.HashCodeBuilder;  
23  import org.apache.commons.lang3.builder.ToStringBuilder;  
24  import org.apache.commons.lang3.builder.ToStringStyle;  
25  import org.apache.commons.lang3.math.NumberUtils;  
26  import org.apache.commons.lang3.text.WordUtils;  
27  import org.apache.commons.lang3.time.DateFormatUtils;  
28  import org.apache.commons.lang3.time.DateUtils;  
29  import org.apache.commons.lang3.time.StopWatch;  
30   
31  public class TestLangDemo {  
32   
33      public void charSetDemo() {  
34          System.out.println("**CharSetDemo**");  
35          CharSet charSet = CharSet.getInstance("aeiou");  
36          String demoStr = "The quick brown fox jumps over the lazy dog.";  
37          int count = 0;  
38          for (int i = 0, len = demoStr.length(); i < len; i++) {  
39              if (charSet.contains(demoStr.charAt(i))) {  
40                  count++;  
41              }  
42          }  
43          System.out.println("count: " + count);  
44      }  
45   
46      public void charSetUtilsDemo() {  
47          System.out.println("**CharSetUtilsDemo**");  
48          System.out.println("计算字符串中包含某字符数.");  
49          System.out.println(CharSetUtils.count(  
50                  "The quick brown fox jumps over the lazy dog.", "aeiou"));  
51   
52          System.out.println("删除字符串中某字符.");  
53          System.out.println(CharSetUtils.delete(  
54                  "The quick brown fox jumps over the lazy dog.", "aeiou"));  
55   
56          System.out.println("保留字符串中某字符.");  
57          System.out.println(CharSetUtils.keep(  
58                  "The quick brown fox jumps over the lazy dog.", "aeiou"));  
59   
60          System.out.println("合并重复的字符.");  
61          System.out.println(CharSetUtils.squeeze("a  bbbbbb     c dd", "b d"));  
62      }  
63   
64      public void objectUtilsDemo() {  
65          System.out.println("**ObjectUtilsDemo**");  
66          System.out.println("Object为null时,默认打印某字符.");  
67          Object obj = null;  
68          System.out.println(ObjectUtils.defaultIfNull(obj, "空"));  
69   
70          System.out.println("验证两个引用是否指向的Object是否相等,取决于Object的equals()方法.");  
71          Object a = new Object();  
72          Object b = a;  
73          Object c = new Object();  
74          System.out.println(ObjectUtils.equals(a, b));  
75          System.out.println(ObjectUtils.equals(a, c));  
76   
77          System.out.println("用父类Object的toString()方法返回对象信息.");  
78          Date date = new Date();  
79          System.out.println(ObjectUtils.identityToString(date));  
80          System.out.println(date);  
81   
82          System.out.println("返回类本身的toString()方法结果,对象为null时,返回0长度字符串.");  
83          System.out.println(ObjectUtils.toString(date));  
84          System.out.println(ObjectUtils.toString(null));  
85          System.out.println(date);  
86      }  
87   
88      public void serializationUtilsDemo() {  
89          System.out.println("*SerializationUtils**");  
90          Date date = new Date();  
91          byte[] bytes = SerializationUtils.serialize(date);  
92          System.out.println(ArrayUtils.toString(bytes));  
93          System.out.println(date);  
94   
95          Date reDate = (Date) SerializationUtils.deserialize(bytes);  
96          System.out.println(reDate);  
97          System.out.println(ObjectUtils.equals(date, reDate));  
98          System.out.println(date == reDate);  
99   
100          FileOutputStream fos = null;  
101          FileInputStream fis = null;  
102          try {  
103              fos = new FileOutputStream(new File("d:/test.txt"));  
104              fis = new FileInputStream(new File("d:/test.txt"));  
105              SerializationUtils.serialize(date, fos);  
106              Date reDate2 = (Date) SerializationUtils.deserialize(fis);  
107   
108              System.out.println(date.equals(reDate2));  
109   
110          } catch (FileNotFoundException e) {  
111              e.printStackTrace();  
112          } finally {  
113              try {  
114                  fos.close();  
115                  fis.close();  
116              } catch (IOException e) {  
117                  e.printStackTrace();  
118              }  
119          }  
120   
121      }  
122   
123      public void randomStringUtilsDemo() {  
124          System.out.println("**RandomStringUtilsDemo**");  
125          System.out.println("生成指定长度的随机字符串,好像没什么用.");  
126          System.out.println(RandomStringUtils.random(500));  
127   
128          System.out.println("在指定字符串中生成长度为n的随机字符串.");  
129          System.out.println(RandomStringUtils.random(5, "abcdefghijk"));  
130   
131          System.out.println("指定从字符或数字中生成随机字符串.");  
132          System.out.println(RandomStringUtils.random(5, true, false));  
133          System.out.println(RandomStringUtils.random(5, false, true));  
134   
135      }  
136   
137      public void stringUtilsDemo() {  
138          System.out.println("**StringUtilsDemo**");  
139          System.out.println("将字符串重复n次,将文字按某宽度居中,将字符串数组用某字符串连接.");  
140          String[] header = new String[3];  
141          header[0] = StringUtils.repeat("*", 50);  
142          header[1] = StringUtils.center("  StringUtilsDemo  ", 50, "^O^");  
143          header[2] = header[0];  
144          String head = StringUtils.join(header, "\n");  
145          System.out.println(head);  
146   
147          System.out.println("缩短到某长度,用...结尾.");  
148          System.out.println(StringUtils.abbreviate(  
149                  "The quick brown fox jumps over the lazy dog.", 10));  
150          System.out.println(StringUtils.abbreviate(  
151                  "The quick brown fox jumps over the lazy dog.", 15, 10));  
152   
153          System.out.println("返回两字符串不同处索引号.");  
154          System.out.println(StringUtils.indexOfDifference("aaabc", "aaacc"));  
155   
156          System.out.println("返回两字符串不同处开始至结束.");  
157          System.out.println(StringUtils.difference("aaabcde", "aaaccde"));  
158   
159          System.out.println("截去字符串为以指定字符串结尾的部分.");  
160          System.out.println(StringUtils.chomp("aaabcde", "de"));  
161   
162          System.out.println("检查一字符串是否为另一字符串的子集.");  
163          System.out.println(StringUtils.containsOnly("aad", "aadd"));  
164   
165          System.out.println("检查一字符串是否不是另一字符串的子集.");  
166          System.out.println(StringUtils.containsNone("defg", "aadd"));  
167   
168          System.out.println("检查一字符串是否包含另一字符串.");  
169          System.out.println(StringUtils.contains("defg", "ef"));  
170          System.out.println(StringUtils.containsOnly("ef", "defg"));  
171   
172          System.out.println("返回可以处理null的toString().");  
173          System.out.println(StringUtils.defaultString("aaaa"));  
174          System.out.println("?" + StringUtils.defaultString(null) + "!");  
175   
176          System.out.println("去除字符中的空格.");  
177          System.out.println(StringUtils.deleteWhitespace("aa  bb  cc"));  
178   
179          System.out.println("分隔符处理成数组.");  
180          String[] strArray = StringUtils.split("a,b,,c,d,null,e", ",");  
181          System.out.println(strArray.length);  
182          System.out.println(strArray.toString());  
183            
184          System.out.println("判断是否是某类字符.");  
185          System.out.println(StringUtils.isAlpha("ab"));  
186          System.out.println(StringUtils.isAlphanumeric("12"));  
187          System.out.println(StringUtils.isBlank(""));  
188          System.out.println(StringUtils.isNumeric("123"));  
189      }  
190   
191      public void systemUtilsDemo() {  
192          System.out.println(genHeader("SystemUtilsDemo"));  
193          System.out.println("获得系统文件分隔符.");  
194          System.out.println(SystemUtils.FILE_SEPARATOR);  
195   
196          System.out.println("获得源文件编码.");  
197          System.out.println(SystemUtils.FILE_ENCODING);  
198   
199          System.out.println("获得ext目录.");  
200          System.out.println(SystemUtils.JAVA_EXT_DIRS);  
201   
202          System.out.println("获得java版本.");  
203          System.out.println(SystemUtils.JAVA_VM_VERSION);  
204   
205          System.out.println("获得java厂商.");  
206          System.out.println(SystemUtils.JAVA_VENDOR);  
207      }  
208   
209      public void classUtilsDemo() {  
210          System.out.println(genHeader("ClassUtilsDemo"));  
211          System.out.println("获取类实现的所有接口.");  
212          System.out.println(ClassUtils.getAllInterfaces(Date.class));  
213   
214          System.out.println("获取类所有父类.");  
215          System.out.println(ClassUtils.getAllSuperclasses(Date.class));  
216   
217          System.out.println("获取简单类名.");  
218          System.out.println(ClassUtils.getShortClassName(Date.class));  
219   
220          System.out.println("获取包名.");  
221          System.out.println(ClassUtils.getPackageName(Date.class));  
222   
223          System.out.println("判断是否可以转型.");  
224          System.out.println(ClassUtils.isAssignable(Date.class, Object.class));  
225          System.out.println(ClassUtils.isAssignable(Object.class, Date.class));  
226      }  
227   
228      public void stringEscapeUtilsDemo(){  
229          System.out.println(genHeader("StringEcsapeUtils"));  
230          System.out.println("转换特殊字符.");  
231          System.out.println("html:" + StringEscapeUtils.escapeHtml3(" "));  
232          System.out.println("html:" + StringEscapeUtils.escapeHtml4(" "));  
233          System.out.println("html:" + StringEscapeUtils.unescapeHtml3(""));  
234          System.out.println("html:" + StringEscapeUtils.unescapeHtml4(""));  
235      }  
236   
237      private final class BuildDemo {  
238          String name;  
239          int age;  
240   
241          public BuildDemo(String name, int age) {  
242              this.name = name;  
243              this.age = age;  
244          }  
245   
246          public String toString() {  
247              ToStringBuilder tsb = new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE);  
248              tsb.append("Name", name);  
249              tsb.append("Age", age);  
250              return tsb.toString();  
251          }  
252   
253          public int hashCode() {  
254              HashCodeBuilder hcb = new HashCodeBuilder();  
255              hcb.append(name);  
256              hcb.append(age);  
257              return hcb.hashCode();  
258          }  
259   
260          public boolean equals(Object obj) {  
261              if (!(obj instanceof BuildDemo)) {  
262                  return false;  
263              }  
264              BuildDemo bd = (BuildDemo) obj;  
265              EqualsBuilder eb = new EqualsBuilder();  
266              eb.append(name, bd.name);  
267              eb.append(age, bd.age);  
268              return eb.isEquals();  
269          }  
270      }  
271   
272      public void builderDemo() {  
273          System.out.println(genHeader("BuilderDemo"));  
274          BuildDemo obj1 = new BuildDemo("a", 1);  
275          BuildDemo obj2 = new BuildDemo("b", 2);  
276          BuildDemo obj3 = new BuildDemo("a", 1);  
277   
278          System.out.println("toString()");  
279          System.out.println(obj1);  
280          System.out.println(obj2);  
281          System.out.println(obj3);  
282   
283          System.out.println("hashCode()");  
284          System.out.println(obj1.hashCode());  
285          System.out.println(obj2.hashCode());  
286          System.out.println(obj3.hashCode());  
287   
288          System.out.println("equals()");  
289          System.out.println(obj1.equals(obj2));  
290          System.out.println(obj1.equals(obj3));  
291      }  
292   
293      public void numberUtils() {  
294          System.out.println(genHeader("NumberUtils"));  
295          System.out.println("字符串转为数字(不知道有什么用).");  
296          System.out.println(NumberUtils.toInt("ba", 33));  
297            
298          System.out.println("从数组中选出最大值.");  
299          System.out.println(NumberUtils.max(new int[] { 1, 2, 3, 4 }));  
300   
301          System.out.println("判断字符串是否全是整数.");  
302          System.out.println(NumberUtils.isDigits("123.1"));  
303   
304          System.out.println("判断字符串是否是有效数字.");  
305          System.out.println(NumberUtils.isNumber("0123.1"));  
306      }  
307   
308      public void dateFormatUtilsDemo() {  
309          System.out.println(genHeader("DateFormatUtilsDemo"));  
310          System.out.println("格式化日期输出.");  
311          System.out.println(DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));  
312   
313          System.out.println("秒表.");  
314          StopWatch sw = new StopWatch();  
315          sw.start();  
316   
317          for (Iterator iterator = DateUtils.iterator(new Date(), DateUtils.RANGE_WEEK_CENTER); iterator.hasNext();) {  
318              Calendar cal = (Calendar) iterator.next();  
319              System.out.println(DateFormatUtils.format(cal.getTime(),  
320                      "yy-MM-dd HH:mm"));  
321          }  
322   
323          sw.stop();  
324          System.out.println("秒表计时:" + sw.getTime());  
325   
326      }  
327   
328      private String genHeader(String head) {  
329          String[] header = new String[3];  
330          header[0] = StringUtils.repeat("*", 50);  
331          header[1] = StringUtils.center("  " + head + "  ", 50, "^O^");  
332          header[2] = header[0];  
333          return StringUtils.join(header, "\n");  
334      }  
335   
336      private void validateDemo(){  
337          String[] strarray = {"a", "b", "c"};  
338          System.out.println("验证功能");  
339          System.out.println(Validate.notEmpty(strarray));  
340      }  
341        
342      private void wordUtilsDemo(){  
343          System.out.println("单词处理功能");  
344          String str1 = "wOrD";  
345          String str2 = "ghj\nui\tpo";  
346          System.out.println(WordUtils.capitalize(str1));  //首字母大写  
347          System.out.println(WordUtils.capitalizeFully(str1));  //首字母大写其它字母小写  
348          char[] ctrg = {'.'};  
349          System.out.println(WordUtils.capitalizeFully("i aM.fine", ctrg));  //在规则地方转换  
350          System.out.println(WordUtils.initials(str1));  //获取首字母  
351          System.out.println(WordUtils.initials("Ben John Lee", null));  //取每个单词的首字母  
352          char[] ctr = {' ', '.'};  
353          System.out.println(WordUtils.initials("Ben J.Lee", ctr));  //按指定规则获取首字母  
354          System.out.println(WordUtils.swapCase(str1));  //大小写逆转  
355          System.out.println(WordUtils.wrap(str2, 1));  //解析\n和\t等字符  
356      }  
357        
358      /**
359       * @param args
360       */  
361      public static void main(String[] args) {  
362          TestLangDemo langDemo = new TestLangDemo();  
363   
364          langDemo.charSetDemo();  
365          langDemo.charSetUtilsDemo();  
366          langDemo.objectUtilsDemo();  
367          langDemo.serializationUtilsDemo();  
368          langDemo.randomStringUtilsDemo();  
369          langDemo.stringUtilsDemo();  
370          langDemo.systemUtilsDemo();  
371          langDemo.classUtilsDemo();  
372          langDemo.stringEscapeUtilsDemo();  
373          langDemo.builderDemo();  
374          langDemo.numberUtils();  
375          langDemo.dateFormatUtilsDemo();  
376          langDemo.validateDemo();  
377          langDemo.wordUtilsDemo();  
378      }  
379   
380  }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-92366-1-1.html 上篇帖子: Mac下使用Phonegap(Apache Cordorva)开发iOS应用 下篇帖子: Apache POI Java读取100万行Excel性能优化:split vs indexOf+subString,谁性能好
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表