仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 591|回复: 11
打印 上一主题 下一主题

[学习教程] JAVA网页设计简化你的 java 字符串操纵:Guava 之 CharMatcher 用法简介仓酷云

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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>
小魔女 该用户已被删除
沙发
发表于 2015-1-20 19:21:54 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
再见西城 该用户已被删除
板凳
发表于 2015-1-25 22:26:27 | 只看该作者
另外编写和运行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:22 来自手机 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
飘灵儿 该用户已被删除
5#
发表于 2015-1-30 19:57:21 来自手机 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
深爱那片海 该用户已被删除
6#
发表于 2015-2-6 15:39:15 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-2-7 09:09:52 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
小女巫 该用户已被删除
8#
发表于 2015-2-22 09:52:35 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
简单生活 该用户已被删除
9#
发表于 2015-3-6 23:49:17 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
谁可相欹 该用户已被删除
10#
发表于 2015-3-13 00:52:45 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
老尸 该用户已被删除
11#
发表于 2015-3-13 12:07:35 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
精灵巫婆 该用户已被删除
12#
发表于 2015-3-20 07:26:17 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 04:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表