|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。对字符串的处置应当是编程举动中最频仍的操纵了,而原生的JDK和Java自己的语法特征使得在Java中举行字符串操纵是一件极为贫苦的事变,假如你熟习Shell/Awk/Sed/Perl/Python等剧本言语,你就也许能分明我说的啥意义了。
前次在这篇利用GoogleGuava丑化你的Java代码:1~4中先容过一些使用Guava库举行字符串操纵的例子,限于篇幅与内容,先容的对照泛,明天就独自的聊聊Guava中的CharMatcher类,并分离一些罕见的需求来举行讲授。
CharMatcher供应了多种对字符串处置的办法,它的次要企图有:
1.找到婚配的字符
2.处置婚配的字符
CharMatcher的外部完成次要包含两部分:
1.完成了大批公用外部类,用来便利用户对字符串做婚配:比方JAVA_DIGIT婚配数字,JAVA_LETTER婚配字母等等。
2.完成了大批处置字符串的办法,利用特定的CharMatcher能够对婚配到的字符串做出多种处置,比方remove(),replace(),trim(),retain()等等。
CharMatcher自己是一个笼统类,个中一些操纵办法是笼统办法,他次要依托外部承继CharMatcher的外部子类来完成笼统办法和重写一些操纵办法,由于分歧的婚配划定规矩的这些操纵办法具有分歧的完成请求。
1、默许完成类
CharMatcher自己供应了良多CharMatcher完成类,以下:
ANY:婚配任何字符
ASCII:婚配是不是是ASCII字符
BREAKING_WHITESPACE:婚配一切可换行的空缺字符(不包含非换行空缺字符,比方"u00a0")
DIGIT:婚配ASCII数字
INVISIBLE:婚配一切看不见的字符
JAVA_DIGIT:婚配UNICODE数字,利用Character.isDigit()完成
JAVA_ISO_CONTROL:婚配ISO把持字符,利用Charater.isISOControl()完成
JAVA_LETTER:婚配字母,利用Charater.isLetter()完成
JAVA_LETTER_OR_DIGET:婚配数字或字母
JAVA_LOWER_CASE:婚配小写
JAVA_UPPER_CASE:婚配年夜写
NONE:不婚配一切字符
SINGLE_WIDTH:婚配单字宽字符,如中笔墨就是双字宽
WHITESPACE:婚配一切空缺字符
2、经常使用操纵办法
CharMatcheris(charmatch):前往婚配指定字符的Matcher
CharMatcherisNot(charmatch):前往不婚配指定字符的Matcher
CharMatcheranyOf(CharSequencesequence):前往婚配sequence中恣意字符的Matcher
CharMatchernoneOf(CharSequencesequence):前往不婚配sequence中任何一个字符的Matcher
CharMatcherinRange(charstartInclusive,charendIncludesive):前往婚配局限内恣意字符的Matcher
CharMatcherforPredicate(Predicate<?superCharater>predicate):前往利用predicate的apply()判别婚配的Matcher
CharMatchernegate():前往以以后Matcher判别划定规矩相反的Matcher
CharMatcherand(CharMatcherother):前往与other婚配前提组合做与来判别的Matcher
CharMatcheror(CharMatcherother):前往与other婚配前提组合做或来判别的Matcher
booleanmatchesAnyOf(CharSequencesequence):只需sequence中有恣意字符能婚配Matcher,前往true
booleanmatchesAllOf(CharSequencesequence):sequence中一切字符都能婚配Matcher,前往true
booleanmatchesNoneOf(CharSequencesequence):sequence中一切字符都不克不及婚配Matcher,前往true
intindexIn(CharSequencesequence):前往sequence中婚配到的第一个字符的坐标
intindexIn(CharSequencesequence,intstart):前往从start入手下手,在sequence中婚配到的第一个字符的坐标
intlastIndexIn(CharSequencesequence):前往sequence中最初一次婚配到的字符的坐标
intcountIn(CharSequencesequence):前往sequence中婚配到的字符计数
StringremoveFrom(CharSequencesequence):删除sequence中婚配到到的字符并前往
StringretainFrom(CharSequencesequence):保存sequence中婚配到的字符并前往
StringreplaceFrom(CharSequencesequence,charreplacement):交换sequence中婚配到的字符并前往
StringtrimFrom(CharSequencesequence):删除首尾婚配到的字符并前往
StringtrimLeadingFrom(CharSequencesequence):删除首部婚配到的字符
StringtrimTrailingFrom(CharSequencesequence):删除尾部婚配到的字符
StringcollapseFrom(CharSequencesequence,charreplacement):将婚配到的组(一连婚配的字符)交换成replacement
StringtrimAndCollapseFrom(CharSequencesequence,charreplacement):先trim在replace
3、一些栗子:
(1)利用预界说的常量(predefineCharMatcher):
CharMatcher.WHITESPACE(Javawhitespacecharacter)
CharMatcher.JAVA_DIGIT
CharMatcher.JAVA_LETTER
CharMatcher.JAVA_LOWER_CASE
CharMatcher.JAVA_UPPER_CASE
CharMatcher.ASCII
CharMatcher.ANY
...
01Stringstr="FirstNameLastName+1123456789!@#$%^&*()_+|}{:"?><";
02//Useapredefinedconstant(predefineCharMatcher)
03CharMatcher.DIGIT.retainFrom(str);
04
05Output:->
06"1123456789"
07
08CharMatcher.JAVA_LETTER.retainFrom(str);
09
10Output:->
11"FirstNameLastName"
12
13CharMatcher.JAVA_LETTER_OR_DIGIT.retainFrom(str);
14
15Output:->
16"FirstNameLastName1123456789"
17
18CharMatcher.ANY.countIn(str)
19
20Output:->
2154
22
23CharMatcher.DIGIT.countIn(str);
24
25Output:->
2610
(2)利用工场办法:
CharMatcher.is(x)
CharMatcher.isNot(_)
CharMatcher.oneOf("aeiou").negate()
CharMatcher.inRange(a,z).or(inRange(A,Z))
...
利用前提组合:
CharMatcherand(CharMatcherother)
CharMatcheror(CharMatcherother)
CharMatchernegate()
1Stringstr="FirstNameLastName+1123456789!@#$%^&*()_+|}{:"?><";
2
3CharMatcher.JAVA_LOWER_CASE.negate().retainFrom(str);
4Output:->
5"FNLN+1123456789!@#$%^&*()_+|}{:"?><"
6
7CharMatcher.JAVA_DIGIT.or(CharMatcher.anyOf("aeiou")).retainFrom(str);
8Output:->
9"iaeaae1123456789"
(3)一些小例子:
01//原字符串
02System.out.println(string);
03
04//往失落把持字符(t,n,b...)
05System.out.println(CharMatcher.JAVA_ISO_CONTROL.removeFrom(string));
06
<p> |
|