- 浏览: 174333 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Sun_Oak:
多谢楼主的分享,感谢。
java对pdf一些基本处理 -
xujiao_source:
大牛啊!请问你投的网易游戏数据挖掘是运营数据挖掘还是数据挖掘研 ...
即将加入IT民工行列,毕业年找工作的一些经历和经验 -
曦阳向上:
我怎么没有成功呢?思考中。。。
页面刷新时保留input键入值 -
linfeng0169:
这个方法 现在是不是不能用了啊 因为 我不会struts 所 ...
flex中导出excel -
lisongqiu168:
888
一次排查事故纪录
版本:common.lang3
源码地址:http://svn.apache.org/repos/asf/commons/proper/lang/trunk
编译方式:maven
javadoc地址:http://commons.apache.org/lang/apidocs/index.html
StringUtils是对java中String类的增强和补充,简化开发。主要方法分为:
1 判空:isEmpty、isBlank
用法略
2 取空格:trim、strip系列方法
这两个方法的区别是trim去掉的是不显示的控制符,而strip去掉的空格。
源码里有趣的地方:
用了一段static块来验证系统支持的java版本。
另外大量用三元运算符,简化代码。
3 判等equals/equalsIgnoreCase
和名字类似,比string增强处是针对null做了处理。
equalsIgnoreCase调用了CharSequenceUtils中的方法,以后再说
4 包含index/contain系列
调用的都是CharSequenceUtils下的方法,没啥好说的。
5 截取字串substring系列
比string类增加了一些对于null的处理以及截取位置的选择方法。
源码中有趣的地方:
在涉及到返回为数组时,中间逻辑都是使用list来处理,最后结果处转为数组。
6 分割字符串 split系列
诸如splitByWholeSeparator和splitPreserveAllTokens和这种方法的主要区别是如何处理连续多个分隔符,前者将多个连续的分隔符视为一个,而后者会分别分割,结果出现很多为空的字符串。
对于这块的逻辑,源码里的实现方式为:
如果分隔符为多个字符,处理逻辑类似
7 合并字符串join系列
使用stringbuilder
源码中设置builder初始大小的逻辑,以第一个需要合并的对象长度来估计。
8 删除子串deleteWhitespace和remove系列
这个没啥好说的,复杂一点的删除都是调用了接下来要说的replace方法
9 替代子串replace、chomp系列
有意思的还是初始化stringbuilder长度
10 重复 repeat/pad/center系列
在量少的时候,尽量用拼接char数组的方式,量多采用stringbuilder
stringbuilder其实也是char数组
测试下了两字节五千次拼接,重复一千遍,直接采用char数组用时93ms,而采用stringbuilder用时173ms。
这里不太理解,为什么是两个字节而不是四个字节或更多,需要再研究下。
11 大小写转换
没什么好说的,主要是对null做处理
12 字符串统计 countMatches
实用,但 也没啥好说的
13 判断属性is系列
调用jdk中的Character方法
14 缩减字符串abbreviate系列
就是将一个长字符串写成头几个字母加省略号的格式,web用处比较多,实现也没什么好说的。
---------------------
结扎,over
源码地址:http://svn.apache.org/repos/asf/commons/proper/lang/trunk
编译方式:maven
javadoc地址:http://commons.apache.org/lang/apidocs/index.html
StringUtils是对java中String类的增强和补充,简化开发。主要方法分为:
1 判空:isEmpty、isBlank
用法略
2 取空格:trim、strip系列方法
这两个方法的区别是trim去掉的是不显示的控制符,而strip去掉的空格。
public static void main(String[] args) { StringBuilder sb = new StringBuilder(); char a = 0x10; sb.append(a); sb.append("aaaa"); sb.append(" "); System.out.println(sb);//aaaa System.out.println(StringUtils.trim(sb.toString()));//aaaa System.out.println(StringUtils.strip(sb.toString()));//aaaa }
源码里有趣的地方:
static { try { // java.text.Normalizer.normalize(CharSequence, Normalizer.Form.NFD); // Be careful not to get Java 1.3 java.text.Normalizer! Class<?> normalizerFormClass = Thread.currentThread().getContextClassLoader() .loadClass("java.text.Normalizer$Form");//$NON-NLS-1$ java6NormalizerFormNFD = normalizerFormClass.getField("NFD").get(null);//$NON-NLS-1$ Class<?> normalizerClass = Thread.currentThread().getContextClassLoader() .loadClass("java.text.Normalizer");//$NON-NLS-1$ java6NormalizeMethod = normalizerClass.getMethod("normalize", new Class[] {CharSequence.class, normalizerFormClass});//$NON-NLS-1$ java6Available = true; } catch (ClassNotFoundException e) { java6Available = false; } catch (NoSuchFieldException e) { java6Available = false; } catch (IllegalAccessException e) { java6Available = false; } catch (NoSuchMethodException e) { java6Available = false; } try { // sun.text.Normalizer.decompose(text, false, 0); Class<?> normalizerClass = Thread.currentThread().getContextClassLoader() .loadClass("sun.text.Normalizer");//$NON-NLS-1$ sunDecomposeMethod = normalizerClass.getMethod("decompose", new Class[] {String.class, Boolean.TYPE, Integer.TYPE});//$NON-NLS-1$ sunAvailable = true; } catch (ClassNotFoundException e) { sunAvailable = false; } catch (NoSuchMethodException e) { sunAvailable = false; } }
用了一段static块来验证系统支持的java版本。
另外大量用三元运算符,简化代码。
3 判等equals/equalsIgnoreCase
和名字类似,比string增强处是针对null做了处理。
equalsIgnoreCase调用了CharSequenceUtils中的方法,以后再说
4 包含index/contain系列
调用的都是CharSequenceUtils下的方法,没啥好说的。
5 截取字串substring系列
比string类增加了一些对于null的处理以及截取位置的选择方法。
源码中有趣的地方:
在涉及到返回为数组时,中间逻辑都是使用list来处理,最后结果处转为数组。
6 分割字符串 split系列
诸如splitByWholeSeparator和splitPreserveAllTokens和这种方法的主要区别是如何处理连续多个分隔符,前者将多个连续的分隔符视为一个,而后者会分别分割,结果出现很多为空的字符串。
对于这块的逻辑,源码里的实现方式为:
char sep = separatorChars.charAt(0);//分隔符为单字符时的情况 while (i < len) { if (str.charAt(i) == sep) { if (match || preserveAllTokens) {//preserveAllTokens为是否考虑处理连续多个分隔符。当没处理一个分隔符后match都会被修改为false,如果接下来的仍然为分隔符,这个if的逻辑将有preserveAllTokens决定。如果preserveAllTokens为false,将跳过这个分隔符,直到遇到下一个不为分隔符的字符时,match被修改为true,才能继续开始分割。 lastMatch = true; if (sizePlus1++ == max) { i = len; lastMatch = false; } list.add(str.substring(start, i)); match = false; } start = ++i; continue; } lastMatch = false; match = true; i++;
如果分隔符为多个字符,处理逻辑类似
while (i < len) { if (separatorChars.indexOf(str.charAt(i)) >= 0) { if (match || preserveAllTokens) { lastMatch = true; if (sizePlus1++ == max) { i = len; lastMatch = false; } list.add(str.substring(start, i)); match = false; } start = ++i; continue; } lastMatch = false; match = true; i++; }
7 合并字符串join系列
使用stringbuilder
bufSize *= ((array[startIndex] == null ? 16 : array[startIndex].toString().length()) + separator.length());
源码中设置builder初始大小的逻辑,以第一个需要合并的对象长度来估计。
8 删除子串deleteWhitespace和remove系列
这个没啥好说的,复杂一点的删除都是调用了接下来要说的replace方法
9 替代子串replace、chomp系列
有意思的还是初始化stringbuilder长度
} int replLength = searchString.length(); int increase = replacement.length() - replLength; increase = (increase < 0 ? 0 : increase); increase *= (max < 0 ? 16 : (max > 64 ? 64 : max)); StringBuilder buf = new StringBuilder(text.length() + increase);
10 重复 repeat/pad/center系列
switch (inputLength) { case 1 : return repeat(str.charAt(0), repeat); case 2 : char ch0 = str.charAt(0); char ch1 = str.charAt(1); char[] output2 = new char[outputLength]; for (int i = repeat * 2 - 2; i >= 0; i--, i--) { output2[i] = ch0; output2[i + 1] = ch1; } return new String(output2); default : StringBuilder buf = new StringBuilder(outputLength); for (int i = 0; i < repeat; i++) { buf.append(str); } return buf.toString(); }
在量少的时候,尽量用拼接char数组的方式,量多采用stringbuilder
stringbuilder其实也是char数组
测试下了两字节五千次拼接,重复一千遍,直接采用char数组用时93ms,而采用stringbuilder用时173ms。
这里不太理解,为什么是两个字节而不是四个字节或更多,需要再研究下。
11 大小写转换
没什么好说的,主要是对null做处理
12 字符串统计 countMatches
实用,但 也没啥好说的
13 判断属性is系列
调用jdk中的Character方法
14 缩减字符串abbreviate系列
就是将一个长字符串写成头几个字母加省略号的格式,web用处比较多,实现也没什么好说的。
---------------------
结扎,over
发表评论
-
一次排查事故纪录
2012-08-17 15:34 1020服务器大范围报读超时 ... -
转帖存档,jvm学习笔记
2010-09-27 12:51 1027http://blog.csdn.net/cutesource ... -
转载 jvm参数大全
2010-05-11 17:20 1220Java 6 JVM 参数选项大全(中文版) ... -
关于hashcode
2010-04-26 11:06 1085object本身的hashcode方法将对象内部地址转化为整数 ... -
面对twitter的网络爬虫的一些设计思路(1)
2010-01-28 16:36 9026正在做关于twitter的数据挖掘的研究,先期需要获取一定量的 ... -
多线程间通信:多生产者-多消费者实例
2010-01-25 13:25 2558基于java的多线程编程必然躲不掉线程间通信这一步,因为jav ... -
slf4j入门
2010-01-08 10:59 1496log4j的作者Ceki Gülcü在停止维护log4j后开始 ... -
tomcat学习1:源码编译
2009-11-26 17:32 1334工具:Eclipse3.5 源码下载:http://apach ... -
httpclient对于https的处理
2009-11-25 20:08 0jdk1.5以上 资料来源:http://www.ibm.co ... -
java对pdf一些基本处理
2009-11-05 11:17 2188apahce 孵化器中有一个项目是pdfbox,这是一个操作处 ... -
几个从javabean到xml的类的使用心得
2009-10-08 11:13 1261自己原来写过一些,但用过的xstream和castor就摒弃山 ... -
命令行方式打包java为jar
2009-09-30 15:29 1767以往都是利用fatjar做打包的工作,这次有人问如何用命令行方 ... -
java的一些小问题1
2009-08-04 16:55 768http://zangxt.iteye.com/blog/43 ... -
基于泛型的快速排序工具类的一些想法
2009-08-03 16:21 1056快速排序是排序算法中最基本的一种方法,《算法导论》一书在第七章 ... -
java继承扫盲2
2009-07-24 10:29 992继承是面向对象编程技 ... -
java继承扫盲1
2009-07-24 10:26 1544继承是OOP语言的必备功能,其功能强大,并且又是OO另一个重量 ... -
初试Jprofiler
2009-07-23 18:18 4982之前测试java程序效率内存占用多用jdk自带的jconsol ... -
学习java进阶篇
2009-07-19 06:30 1635本来我想把这篇文章的名字命名为: <怎样成为一个优秀的J ...
相关推荐
在给定的标题 "org.apache.commons.lang3.StringUtils.jar.rar" 中,我们可以看到这个压缩包包含的是 `StringUtils.jar`,实际上它是一个 `common-lang3.jar` 文件的别名。这个 JAR 包是 Apache Commons Lang 项目的...
/* 内含 common-lang3.jar commons-lang3-3.9-bin.zip commons-lang3-3.9-src.zip 使用说明.txt*/ public static String getClientIp(HttpServletRequest request) { String ip = request.getHeader("X-...
Apache Commons Lang是一个非常重要的Java库,它为Java标准类库提供了许多实用的工具类和扩展。这个资源包包含了丰富的功能,极大地增强了Java开发者的生产力。标题中的"org.apache.commons.lang包"指的是该库的主要...
System.out.println(StringUtils.isEmpty(null)); // 输出 true System.out.println(StringUtils.isEmpty("")); // 输出 true System.out.println(StringUtils.isEmpty(" ")); // 输出 false System.out.println...
1. **非空判断**:`StringUtils.isNotBlank(String str)`和`StringUtils.isEmpty(String str)`这两个方法分别用于判断字符串是否为非空(即不为`null`且长度大于0)和是否为空(包括`null`和空字符串)。这是在处理...
1. **StringUtils**: 提供了一系列静态方法,用于字符串的处理,如分割、替换、比较、删除空白字符等。 2. **ArrayUtils**: 对数组的操作,包括添加、删除、复制、填充、转换等。 3. **StringUtils**: 与StringUtils...
1. **字符串处理**:提供了一系列强大的字符串操作方法,如StringUtils,可以进行拼接、截取、替换、格式化等操作,避免了频繁的`new StringBuilder()`和`new StringBuffer()`。 2. **数组操作**:ArrayUtils提供了...
1. 字符串连接优化:使用`StringUtils.join()`方法,可以更高效地合并多个字符串,避免使用`+`操作符导致的不必要的StringBuilder实例化。 2. 日期格式化:`DateUtils.parseDate()`可以解析多种格式的日期字符串,...
1. **StringUtils**:提供了字符串操作的实用方法,如空格处理、比较、格式化等。 2. **ArrayUtils**:处理数组的方法,如添加、删除、复制、合并等。 3. **ClassUtils**:帮助处理类和类加载器的操作,如转换类型...
1. Lang2.6:这是Lang库的一个里程碑版本,引入了一些新的工具类,例如ArrayUtils、CharUtils和StringUtils等,增强了对数组、字符串、字符等基本类型的操作。此外,2.6版本还优化了异常处理,提供了一些方便的异常...
1. **org.apache.commons.lang**:这个包中包含了一些非常通用且高复用性的工具类,比如`StringUtils`、`ObjectUtils`等。 2. **org.apache.commons.lang.builder**:该包提供了一系列用于快速生成Java类中常见的...
1. **Apache Commons Lang**: 这个模块提供了许多高级字符串处理、日期和时间操作、数学计算以及类型转换等功能。例如,StringUtils 提供了各种字符串操作,如空白字符处理、字符串比较、格式化等;ClassUtils 可以...
Apache Commons Lang是Java编程语言中的一个实用工具库,它提供了许多在标准Java API中未涵盖的高级字符串和对象处理功能。这个"commons-lang-2.4.rar"压缩包包含了两个子文件,分别是"commons-lang-2.4-bin.zip"和...
2. **commons-lang-2.4.jar**:这是Apache Commons Lang库,提供了一些Java语言功能的扩展,包括字符串处理、日期和时间操作、类型转换等。它弥补了Java标准库的一些不足,如StringUtils、ArrayUtils和BooleanUtils...
最新jar commons-lang3-3.3.2.jar org.apache.commons.lang3.StringUtils;
1. **字符串处理**:Lang3提供了更强大的字符串操作工具,如WordUtils、StringUtils等,可以进行复杂的字符串格式化、分割、替换和比较。 2. **日期和时间**:Lang3增加了对Java 8日期时间API的支持,提供日期时间...
- Apache Commons Lang的`StringUtils`:提供了更多实用的字符串操作,如空白字符处理、分隔符拆分、驼峰命名转换等。 2. **日期时间操作**: - `java.util.Date`和`Calendar`:基础的日期时间处理,但API设计...
- `StringUtils`:这个类提供了大量的静态方法用于字符串的处理,如空格处理、字符串拼接、格式化、查找替换、分割和连接等。 - `EscapeUtils`:提供了HTML、XML、JavaScript等特殊字符的转义和反转义功能,以确保...