- 浏览: 304986 次
- 性别:
- 来自: 山西
博客专栏
-
天天编程
浏览量:22020
最新评论
-
变脸小伙:
运用到了场景中,希望接力
StringBuffer源码理解 -
fangsj:
IE9 安全设置 把这个禁用掉了
spring mvc 文件上传+本地预览+一次提交 -
xu-ch:
今天面试,遇到这题,求出了相似度,面试官问我算法原理是什么,悲 ...
计算字符串相似度算法——Levenshtein -
flywangfei:
你是创新工场的么?
计算字符串相似度算法——Levenshtein -
scwuwei:
六点起床比较好
《4点起床-最养生和高效的时间管理》读书笔记
这次不按照前面的介绍了,方法都大同小异,下面就介绍几个有意思一点的方法
1.left,取左边几个字符
同理,有 right方法,有mid方法,取中间几个。实现都是用substring实现
例如:
StringUtils.left("abc", 0) = "" StringUtils.left("abc", 2) = "ab" StringUtils.left("abc", 4) = "abc"
这个可能在字符串判断中用到
public static String left(String str, int len) { if (str == null) { return null; } if (len < 0) { return EMPTY; } if (str.length() <= len) { return str; } //这一句话是实现。 return str.substring(0, len); }
2.substringBefore(str,separator),找到出现separator之前的字符串。
实现就是先找到出现separator的位置,然后切字符串。
3.删除全部空格及空格类似字符
实现就是每个比对,通过的写入char[]中。
public static String deleteWhitespace(String str) {}
4.删除某个字符串
//感觉这个方法写的很干脆 public static String removeStart(String str, String remove) { if (isEmpty(str) || isEmpty(remove)) { return str; } if (str.startsWith(remove)){ return str.substring(remove.length()); } return str; } //直接替换 public static String remove(String str, String remove) { if (isEmpty(str) || isEmpty(remove)) { return str; } return replace(str, remove, EMPTY, -1); }
5.repeat 重复
例子:
StringUtils.repeat(null, 2) = null StringUtils.repeat("", 2) = "" StringUtils.repeat("a", 3) = "aaa" StringUtils.repeat("ab", 2) = "abab" StringUtils.repeat("a", -2) = "" StringUtils.repeat("", "x", 3) = "xxx" StringUtils.repeat("?", ", ", 3) = "?, ?, ?"
//这个就是实现的原理, public static String repeat(char ch, int repeat) { //创建一个重复过后的数组,然后往里写入字符 char[] buf = new char[repeat]; for (int i = repeat - 1; i >= 0; i--) { buf[i] = ch; } return new String(buf); }
6.首字母大写
public static String capitalize(String str) { int strLen; if (str == null || (strLen = str.length()) == 0) { return str; } //首字母大写,然后切割后面的 return new StringBuilder(strLen) .append(Character.toTitleCase(str.charAt(0))) .append(str.substring(1)) .toString(); }
另外还有首字母小写的方法uncapitalize(),还有大小写装换的swapCase()。
7.统计字符串中出现某个字符串的次数
//统计出现次数"aaaa"出现"aa"算两次 public static int countMatches(CharSequence str, CharSequence sub) { if (isEmpty(str) || isEmpty(sub)) { return 0; } int count = 0; int idx = 0; //查看是否包含 while ((idx = CharSequenceUtils.indexOf(str, sub, idx)) != INDEX_NOT_FOUND) { //包含的话,位置加上匹配的长度,这样才会有"aaaa"出现"aa"两次,而不是三次。 count++; idx += sub.length(); } return count; }
8.判断是否是数字
public static boolean isNumeric(CharSequence cs) { if (cs == null || cs.length() == 0) { return false; } int sz = cs.length(); for (int i = 0; i < sz; i++) { //比较每一个字符对应的数字是否在一定f范围内 if (Character.isDigit(cs.charAt(i)) == false) { return false; } } return true; }
9.将字符串颠倒
public static String reverse(String str) { if (str == null) { return null; } //这里的实现就是两个字符数组的赋值操作 return new StringBuilder(str).reverse().toString(); }
10.将多余字符变成...
还有可以从中间加入的
例子
StringUtils.abbreviate("abcdefghijklmno", -1, 10) = "abcdefg..." StringUtils.abbreviate("abcdefghijklmno", 0, 10) = "abcdefg..." StringUtils.abbreviate("abcdefghijklmno", 1, 10) = "abcdefg..." StringUtils.abbreviate("abcdefghijklmno", 4, 10) = "abcdefg..." StringUtils.abbreviate("abcdefghijklmno", 5, 10) = "...fghi..." StringUtils.abbreviate("abcdefghijklmno", 6, 10) = "...ghij..."
public static String abbreviate(String str, int maxWidth) { return abbreviate(str, 0, maxWidth); } public static String abbreviate(String str, int offset, int maxWidth) { if (str == null) { return null; } //如果最大字符小于4,就报错,因为一个。就是一个字符 if (maxWidth < 4) { throw new IllegalArgumentException("Minimum abbreviation width is 4"); } if (str.length() <= maxWidth) { return str; } if (offset > str.length()) { offset = str.length(); } if (str.length() - offset < maxWidth - 3) { offset = str.length() - (maxWidth - 3); } final String abrevMarker = "..."; //替换最大字符数的最后三个字符为... if (offset <= 4) { return str.substring(0, maxWidth - 3) + abrevMarker; } //这里限制前面的字符是,前面三个+后面三个,所以不能小于7 if (maxWidth < 7) { throw new IllegalArgumentException("Minimum abbreviation width with offset is 7"); } if (offset + maxWidth - 3 < str.length()) { return abrevMarker + abbreviate(str.substring(offset), maxWidth - 3); } return abrevMarker + str.substring(str.length() - (maxWidth - 3)); }
11.列出两字符串不同的内容(列出第二个参数不同的部分)
//例如: difference("i am a machine", "i am a robot") -> "robot" public static String difference(String str1, String str2) { if (str1 == null) { return str2; } if (str2 == null) { return str1; } //列出str1从开始匹配,到不一样的位置开始,然后将这个位置返回,全部一样就返回-1 int at = indexOfDifference(str1, str2); if (at == INDEX_NOT_FOUND) { return EMPTY; } return str2.substring(at); }
同样还有去相同部分的getCommonPrefix
12.直接带编码的toString
public static String toString(byte[] bytes, String charsetName) throws UnsupportedEncodingException { return charsetName == null ? new String(bytes) : new String(bytes, charsetName); }
13.休息
现在StringUtils就剩下两个地方没看了:
一个是Levenshtein距离
还有一个是内部类InitStripAccents
发表评论
-
fastcgi中的多线程使用
2012-04-06 22:38 138020.背景 在项目中加入了 ... -
crc循环校验原理和实现
2012-03-29 23:33 194441.CRC简介 CRC(cyclical redundanc ... -
TreeMap源码理解
2012-01-31 10:44 01.首先看构造方法 public TreeMap() { ... -
HashMap源码理解
2012-01-30 21:33 1898看看HashMap对应的源码。 1.类、接口关系 ... -
StringUtils源码理解(下)
2012-01-16 15:46 2265本文介绍StringUtils的剩下的两个方法 1. ... -
StringUtils源码理解(上)
2012-01-11 23:08 4824StringUtils 源码,使用的是commons-lang ... -
Properties源码理解
2012-07-05 12:23 3981Properties用来读配置文件 ... -
字符流(一)Reader和Writer源码理解
2011-11-27 20:32 15231.Reader 1.1 继承关系 public ... -
字符流(二)BufferedReader和BufferedWriter源码理解
2011-11-27 20:33 48631.BufferedReader 1.1 继承关系 ... -
DataInputStream和DataOutputStream源码理解
2011-11-17 00:02 44841.FilterInputStream简介 列出主要的内 ... -
InputStream,OutputStream源码理解
2011-11-09 22:50 34241.理解字节流和字符流 按流的形式分: 字节流和字符流。 ... -
File源码理解
2011-11-07 23:55 44151.构造函数 最基本的构 ... -
Thread源码理解
2011-10-23 14:36 43651.首先看一下Runnable接口 ... -
泛型简单回顾
2011-09-06 23:36 1348泛型的简介 1.java引入泛型的好处是安全简单。 2. ... -
LinkedList源码理解
2011-08-31 00:26 1461LinkedList源码 0.首先这个类中的两个变量 ... -
Vector源码理解
2011-08-29 23:44 1553Vector类 1.系统的变量 //记录元素的数组 pr ... -
ArrayList源码理解
2011-08-15 21:02 1769构造方法: ... -
Arrays源码理解
2011-08-15 20:34 13801.equals public static boo ... -
StringBuffer源码理解
2011-06-22 19:39 5729StringBuffer 存储和操作字符串 它所继承实现的类 ...
相关推荐
`StringUtils`是Apache Commons Lang库中的一个核心工具类,它提供了大量的静态方法,用于处理字符串。这个类在Java开发中非常常见,因为它弥补了Java标准库中对字符串操作的不足。`StringUtils`类包含了多种字符串...
在阅读《StringUtils 从报文中取得数据》这篇博客时,你可能会学到如何结合使用这些方法来解析复杂的报文数据,理解源码可以加深对工具类的理解,并能更好地应用到实际项目中。通过分析StringUtils 的源码,开发者...
6. **异常处理**: 在源码中,可以看到大量的`SQLException`及其子类的抛出和处理,这有助于理解在出现错误时,如网络中断、数据库无响应等,如何优雅地处理异常情况。 7. **连接池**: 连接池是提高性能的关键,`...
在标签中提到的"源码",意味着这些工具类的实现细节是开放的,开发者可以通过阅读源码来理解其内部工作原理,学习优秀代码的设计模式和最佳实践。"工具"则表明它们是作为开发者的工具,帮助解决日常编码中的常见问题...
Lang 3.5中广泛应用了设计模式,如工厂模式(如`ClassUtils.getClass()`)、单例模式(如`NullArgumentException`)以及装饰器模式(如`StringUtils`中的各种静态方法)。 3. **异常处理** Lang 3.5在处理可能抛...
- `StringUtils` 类是Lang库中的核心类之一,它提供了大量的字符串处理方法,如空格处理、比较、替换、分割等。通过阅读源码,你可以学习到如何高效地处理Java中的字符串,以及在没有Java 8特性时如何实现高级字符...
在本文中,我们将深入探讨xUtils的源码,理解其内部实现机制,以便更好地利用这个强大的工具。 首先,我们来看xUtils的核心模块: 1. **网络请求库**:xUtils提供了HttpUtils,基于HttpURLConnection实现了网络...
本篇文章将深入探讨一个特定的Android应用项目——“英语朗读器”的源码,旨在帮助开发者理解并学习如何在Android环境中实现语音合成技术,为用户提供英语发音练习的功能。 首先,我们要明白,这个应用的核心功能是...
例如,StringUtils 类提供了各种字符串操作方法,如 join、split 和 startsWith,而 NumberUtils 提供了更安全的数字转换方法,避免了空指针异常。 2. **Apache Commons IO** Commons IO 是处理输入/输出流的工具...
这个"commons-lang-源码跟帮助"文件包含了Apache Commons Lang库的源代码和相关的帮助文档,对于理解其内部工作原理和优化你的Java项目非常有帮助。下面将详细探讨这个库中的关键知识点。 1. **StringUtils**: 这是...
源码中,核心部分可能包括以下几个关键类: 1. `GridUnlockView`:这是自定义的View类,负责绘制九宫格并处理触摸事件。在这个类里,你需要创建一个二维数组来表示九个方格,然后通过`onDraw()`方法绘制它们。同时...
这个源码包"commons-lang-2.4-src"包含了2.4版本的完整源代码,对于Java开发者来说,这是一个宝贵的资源,可以深入理解如何实现常见的编程任务,例如字符串处理、日期和时间操作、数学计算以及对象创建等。...
源码中的注释通常也会解释函数和类的作用,这对提高编程技能非常有帮助。此外,对于想要贡献开源项目的人来说,阅读和理解源码是参与进来的第一步。因此,这份"apache-common最全的源码"对于Java开发者而言,无疑是...
1. **字符串处理**:Commons Lang 提供了丰富的字符串操作方法,如StringUtils,它包含了大量的静态方法,用于处理字符串的空白、比较、格式化、分割、替换等任务,大大简化了对字符串的操作。 2. **异常处理**:...
xUtils还包含了一些实用工具类,如StringUtils、DateUtils、ConvertUtils等,它们提供了字符串、日期、类型转换等常见操作的便捷方法。 7. **性能优化**: xUtils在设计时就考虑到了性能问题,比如内存管理、...
1. **字符串工具类**:如StringUtils,提供了诸如格式化、拼接、检查空值等实用方法,避免了手动处理字符串时的常见错误。 2. **集合工具类**:如CollectionsUtils,提供了对List、Set、Map等集合的通用操作,如...
其次,这个jar包还包含了源码,这意味着开发者可以查看并理解这些工具类的内部实现。这对于学习Java编程技巧、优化代码或者根据实际需求扩展功能非常有帮助。开发者可以查看源码,了解某个方法的具体实现,或者在...
1. **String utilities**:Lang库提供了大量的字符串处理方法,如`StringUtils`类,包括拼接、分割、替换、格式化等操作,弥补了Java String类功能的不足。 2. **Array utilities**:`ArrayUtils`提供了对数组的...
在生成验证码时,可能会用到如`StringUtils`类的一些方法,以增强代码的功能和可读性。 总的来说,"Android随机验证码.zip"源码资源提供了一个基础的Android验证码生成和显示的实现,开发者可以在此基础上根据实际...
Mybatis Plus是一个强大的Mybatis扩展框架,它为Mybatis提供了许多便利的功能,简化了开发过程。...通过使用它的Service层封装和源码学习,开发者能够更好地理解和应用这个框架,进一步优化自己的项目开发流程。