Guava-base接口|Ascii|CharMatcher
来源:互联网 发布:sql server count 1 编辑:程序博客网 时间:2024/06/05 14:30
接口:
1.supplier定义了接口,接口只定义了一个方法get,用以返回实例
public interface Supplier<T> {
/*** Retrieves an instance of the appropriate type. The returned object may or
* may not be a new instance, depending on the implementation.
*返回的可能是新的instance,或者不是。这个根据具体的实现。
* @return an instance of the appropriate type
*/
T get();
}
2.preditate 定义了接口Returns the result of applying this predicate to input
.
public interface Predicate<T> {
boolean apply(@Nullable T input);
@Override
boolean equals(@Nullable Object object);
}
3.Function<F,T>定义了接口
public interface Function<F, T> {
@Nullable T apply(@Nullable F input);
@Override
boolean equals(@Nullable Object object);
}
4.FinalizableReference
public interface FinalizableReference {
void finalizeReferent();
}
类:
1.final class Ascii,定义了private 构造函数,不能创建新对象。
定义了1-32,0,127
以及一些静态方法:
public static boolean isUpperCase(char c) { return (c >= 'A') && (c <= 'Z'); } public static boolean isLowerCase(char c) { // Note: This was benchmarked against the alternate expression "(char)(c - 'a') < 26" (Nov '13) // and found to perform at least as well, or better. return (c >= 'a') && (c <= 'z'); }//通过与运算,可将讲lowercase 字符转换成大写字符 public static char toUpperCase(char c) { return isLowerCase(c) ? (char) (c & 0x5f) : c; } public static char toLowerCase(char c) { return isUpperCase(c) ? (char) (c ^ 0x20) : c; } //定义了讲chars ,string进行upcase与lowercase的方法 CharSequence是String实现的一个接口,相当简单, //就是要求是一串字符。所以每个参数类型是/CharSequence的方法,都可以实际代入String对象。 // 为什么这些方法不干脆定义String作为参数类型?因为还有其他的CharSequence类型的类, //比如StringBuffer和StringBuilder这两个很重要的类。 String对象是不可变的,这两个可变,所以我们在构造 //字符串的过程中往往要用到StringBuffer和StringBuilder。如果那些方法定义String作为参数类型,那么就没法对 //它们用那些方法,先得转化成String才能用。但StringBuffer和StringBuilder转换为String再转换过来很化时间的, //用它们而不是直接用String的“加法”来构造新String本来就是为了省时间,所以如果用String作为参数类型就杯具了。 /*只写一种转换*/ public static String toLowerCase(CharSequence chars) { if (chars instanceof String) {//判断是否是String类型 return toLowerCase((String) chars); } int length = chars.length(); //新建StringBuilder,并放入参数 StringBuilder builder = new StringBuilder(length); for (int i = 0; i < length; i++) { builder.append(toLowerCase(chars.charAt(i))); } return builder.toString(); } //返回字母的顺序。private static int getAlphaIndex(char c) {// Fold upper-case ASCII to lower-case and// make zero-indexed and unsigned (by casting to char).return (char) ((c | 0x20) - 'a');} //判断两个字母串,忽略大小写是否相等public static boolean equalsIgnoreCase(CharSequence S1,CharSequence S2){if(S1 == S2){return true;}if(S1.length() != S2.length()){return false;}int len = S1.length();for(int i = 0;i < len;i++){char c1 = S1.charAt(i);char c2 = S2.charAt(i);if(c1 == c2){continue;}int n1 = getAlphaIndex(c1);int n2 = getAlphaIndex(c2);if(n1 < 26 && n1 == n2){continue;}else{return false;}}return true;}//还有字符代换的函数@Beta @CheckReturnValue public static String truncate(CharSequence seq, int maxLength, String truncationIndicator)
2:charmatcher,其实现Predicate<Character>接口,要重写
public boolean apply(Character character) { return matches(character); }
返回第一个匹配的下标:
public int indexIn(CharSequence sequence) { int length = sequence.length(); for (int i = 0; i < length; i++) { if (matches(sequence.charAt(i))) { return i; } } return -1; }
包含起始位置的:
public int indexIn(CharSequence sequence, int start) { int length = sequence.length(); Preconditions.checkPositionIndex(start, length); for (int i = start; i < length; i++) { if (matches(sequence.charAt(i))) { return i; } } return -1; }可以使用的方法,如下图:
以及用marcher进行两个charsequence替换代码:
public String replaceFrom(CharSequence sequence, CharSequence replacement) { int replacementLen = replacement.length(); if (replacementLen == 0) { return removeFrom(sequence); } if (replacementLen == 1) { return replaceFrom(sequence, replacement.charAt(0)); } String string = sequence.toString(); int pos = indexIn(string); if (pos == -1) { return string; } int len = string.length(); StringBuilder buf = new StringBuilder((len * 3 / 2) + 16);//? int oldpos = 0; do { buf.append(string, oldpos, pos); buf.append(replacement); oldpos = pos + 1; pos = indexIn(string, oldpos); } while (pos != -1); buf.append(string, oldpos, len); return buf.toString(); }源码中构建了一些常用的macher:
和一些构造方法:
以anyOf为例:
public static CharMatcher anyOf(final CharSequence sequence) { switch (sequence.length()) {//判断charsequence长度,以避免重复代码。
<span style="white-space:pre"></span>假如长度大于2,新建字符数组,先进行排序。重写了matches方法(通过Arrays的二分法查找判断结果是不是大于0来判断);
case 0: return NONE; case 1: return is(sequence.charAt(0)); case 2: return isEither(sequence.charAt(0), sequence.charAt(1)); default: // continue below to handle the general case } // TODO(user): is it potentially worth just going ahead and building a precomputed matcher? final char[] chars = sequence.toString().toCharArray(); Arrays.sort(chars); StringBuilder description = new StringBuilder("CharMatcher.anyOf(\""); for (char c : chars) { description.append(showCharacter(c)); } description.append("\")"); return new CharMatcher(description.toString()) { @Override public boolean matches(char c) { return Arrays.binarySearch(chars, c) >= 0; } @Override @GwtIncompatible("java.util.BitSet") void setBits(BitSet table) { for (char c : chars) { table.set(c); } } }; }
0 0
- Guava-base接口|Ascii|CharMatcher
- Guava base -- CharMatcher
- Guava CharMatcher
- Guava base -- Ascii
- guava之CharMatcher
- guava中String的CharMatcher
- Google Guava 库 CharMatcher 、Joiner以及Splitter
- Google Guava学习(10)-Guava字符串工具CharMatcher
- CharMatcher
- 【Android学习笔记】NoSuchMethodError: com.google.common.base.CharMatcher.whitespace()
- Guava base -- Joiner
- Guava base -- Splitter
- Guava base -- Charset
- Guava base -- Strings
- Guava base -- Preconditions
- Guava base -- Objects
- Guava base -- MoreObjects
- Guava base -- Enums
- PV、UV、VV、IP的含义
- android学习计划
- JQuery合并相邻单元格
- ArcSDE 用法
- js中的undefined 和 null, NaN
- Guava-base接口|Ascii|CharMatcher
- maven生命周期
- 开发规范常用项
- 以太网中的各种通信协议
- Android编译系统环境初始化过程分析
- iOS8指纹识别TouchID
- mysql主从库不同步问题解决方法
- android之权限大全
- UltraEdit 显示十六进制