仓酷云

标题: JAVA网页设计简化你的 java 字符串操纵:Guava 之 CharMatcher 用法简介仓酷云 [打印本页]

作者: 兰色精灵    时间: 2015-1-18 11:17
标题: JAVA网页设计简化你的 java 字符串操纵:Guava 之 CharMatcher 用法简介仓酷云
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?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>
作者: 小魔女    时间: 2015-1-20 19:21
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者: 再见西城    时间: 2015-1-25 22:26
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者: 若相依    时间: 2015-1-28 19:56
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者: 飘灵儿    时间: 2015-1-30 19:57
是一种使网页(Web Page)产生生动活泼画面的语言
作者: 深爱那片海    时间: 2015-2-6 15:39
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者: 愤怒的大鸟    时间: 2015-2-7 09:09
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者: 小女巫    时间: 2015-2-22 09:52
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者: 简单生活    时间: 2015-3-6 23:49
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者: 谁可相欹    时间: 2015-3-13 00:52
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
作者: 老尸    时间: 2015-3-13 12:07
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者: 精灵巫婆    时间: 2015-3-20 07:26
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2