??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲视频免费播放,亚洲卡一卡2卡三卡4卡无卡三,亚洲精品视频在线观看视频http://www.tkk7.com/sy1214520/category/32329.html痛ƈ快乐着zh-cnThu, 15 Apr 2010 15:53:26 GMTThu, 15 Apr 2010 15:53:26 GMT60- 使用 XStream ?Java 对象序列化ؓ XMLhttp://www.tkk7.com/sy1214520/archive/2010/04/14/318294.html虫旺福虫旺福Wed, 14 Apr 2010 09:58:00 GMThttp://www.tkk7.com/sy1214520/archive/2010/04/14/318294.htmlhttp://www.tkk7.com/sy1214520/comments/318294.htmlhttp://www.tkk7.com/sy1214520/archive/2010/04/14/318294.html#Feedback0http://www.tkk7.com/sy1214520/comments/commentRss/318294.htmlhttp://www.tkk7.com/sy1214520/services/trackbacks/318294.html阅读全文

]]> - Appfuse的在UAPIhttp://www.tkk7.com/sy1214520/archive/2010/02/01/311455.html虫旺福虫旺福Mon, 01 Feb 2010 01:33:00 GMThttp://www.tkk7.com/sy1214520/archive/2010/02/01/311455.htmlhttp://www.tkk7.com/sy1214520/comments/311455.htmlhttp://www.tkk7.com/sy1214520/archive/2010/02/01/311455.html#Feedback0http://www.tkk7.com/sy1214520/comments/commentRss/311455.htmlhttp://www.tkk7.com/sy1214520/services/trackbacks/311455.htmlhttp://static.raibledesigns.com/downloads/struts-resume/api/

]]> - Java 多线E与q发~程ȝQ复习一下)http://www.tkk7.com/sy1214520/archive/2009/07/15/286869.html虫旺福虫旺福Wed, 15 Jul 2009 06:24:00 GMThttp://www.tkk7.com/sy1214520/archive/2009/07/15/286869.htmlhttp://www.tkk7.com/sy1214520/comments/286869.htmlhttp://www.tkk7.com/sy1214520/archive/2009/07/15/286869.html#Feedback0http://www.tkk7.com/sy1214520/comments/commentRss/286869.htmlhttp://www.tkk7.com/sy1214520/services/trackbacks/286869.html阅读全文

]]> - java性能优化Q^时应该注意的事情。不一定全寏V?/title>http://www.tkk7.com/sy1214520/archive/2008/12/22/247733.html虫旺福虫旺福Mon, 22 Dec 2008 04:05:00 GMThttp://www.tkk7.com/sy1214520/archive/2008/12/22/247733.htmlhttp://www.tkk7.com/sy1214520/comments/247733.htmlhttp://www.tkk7.com/sy1214520/archive/2008/12/22/247733.html#Feedback0http://www.tkk7.com/sy1214520/comments/commentRss/247733.htmlhttp://www.tkk7.com/sy1214520/services/trackbacks/247733.html阅读全文

]]> - log4j配置http://www.tkk7.com/sy1214520/archive/2008/11/10/239755.html虫旺福虫旺福Mon, 10 Nov 2008 15:24:00 GMThttp://www.tkk7.com/sy1214520/archive/2008/11/10/239755.htmlhttp://www.tkk7.com/sy1214520/comments/239755.htmlhttp://www.tkk7.com/sy1214520/archive/2008/11/10/239755.html#Feedback0http://www.tkk7.com/sy1214520/comments/commentRss/239755.htmlhttp://www.tkk7.com/sy1214520/services/trackbacks/239755.html在维护系l时Q难免会时不时地跟代码再ơ打些交道。今天想再操刀做个工hQ居然不太记得了log4j的配|,不得不从apache再重新down了相关的jar与DOCQ匆匆看看了一下,?/span>点写下来Q日后肯定还用得着Q同时也希望对网友们有用?/span>
Log4j基本上已l是java里的首选日志工具了Q它主要׃部分l成QLoggers, Appenders和Layouts (注意后面都加了s啦,思义一个配|中可以分别允许有多个此cd象存在,后面详l介l??br />
LoggersQ用来定义日志消息的cd及别;
AppendersQ用来定义日志消息的输出l端Q?br />
LayoutsQ用来定义日志消息的输出格式?/span>
Logger
Loggers层次Q?br />
?span style="font-family: ">logger的名字是大小写敏感?/span>
规则Q如果类P的名字是另一个类C的名字的前缀Q且P与C之间?#8220;.”可接v来,那么UP为祖先层ơ;如果层次A与其子层ơ之间没有Q何父层次Q则认ؓ层次A为父层次?/span>
|
例如Qorg.apache.log4j是org.apache.log4j.Logger的父层次Q而org.apache是org.apache.log4j与org.apache.log4j.Logger的祖先层ơ?/span>
另外Q注意log4j中有个默认的rootU别的loggerQ在所有logger中,它是最高别,其它所有logger均承于rootQroot有以下二个特性:
1. 它L存在的?br />
2. 它不能通过名字直接获取其实?root实例可以通过cLogger的静态方法Logger.getRootLogger获得Q而其它logger则可以直接通过名字来获取Logger.getLogger)?/span>
关于Loggers中的U别Q?/span>
Ҏ个loggerQ可以指定其U别Q在pȝorg.apache.log4j.Level中,已经定义了五个别,分别为debug, info, warn, error, fatal?/span>
规则Q设当前logger为XQ从X开始往X的父cL向开始算(包括X本n)Q直到名为root的loggerQ第一个不为null的别值就是X的别倹{?/span>
|
日志昄Q?/span>
U别的定义是Zqo性地选择日志?/span>
规则Q若当前h式别ؓPQ而当前的logger的别ؓQQ当且仅当在P>=Q的情况下Q日志信息才能显C?/span>
|
关于日志中别的关系为:DEBUG < INFO < WARN < ERROR < FATAL
?br />
关于此规则的说明Q有以下代码为实例:
// get a logger instance named "com.foo"
Logger logger = Logger.getLogger("com.foo");
// Now set its level. Normally you do not need to set the
// level of a logger programmatically. This is usually done
// in configuration files.
logger.setLevel(Level.INFO);
Logger barlogger = Logger.getLogger("com.foo.Bar");
// This request is enabled, because WARN >= INFO.
logger.warn("Low fuel level.");
// This request is disabled, because DEBUG < INFO.
logger.debug("Starting search for nearest gas station.");
// The logger instance barlogger, named "com.foo.Bar",
// will inherit its level from the logger named
// "com.foo" Thus, the following request is enabled
// because INFO >= INFO.
barlogger.info("Located nearest gas station.");
// This request is disabled, because DEBUG < INFO.
barlogger.debug("Exiting gas station search");
|
Appenders与Layouts
Appender正如前面所qͼ是用来定义日志信息的输出l端Q最觉的输出l端有console与file了,另外q有其它如GUI components, JMS, NT Event Loggers, remote socket servers{等?/span>
Appender也有cMl承的原则,卛_前logger的appender包括其它父类的appender。这样就会出C个logger可能拥有多个appender了,在现实中看来Q就是log4j的日志信息可以同q输出到console, file{等l端了。当ӞZ不此appender恶性叠加,可以通过讄additivity标志来阻止ѝ?/span>
规则Q若当前logger为CQ则C拥有包括其自己及其父cȝ所有appender。另外,若C的父logger为PQ且P的additivity标志已经讄成ؓfalseQ则C只拥有自己及P的appender了,而P则只能拥有本w的appender?/span>
以下表格可以清晰说明此规则:
Logger
Name
| Added
Appenders
| Additivity
Flag
| Output Targets
| Comment
|
root
| A1
| not applicable
| A1
| The root logger is anonymous but can be accessed with the Logger.getRootLogger() method. There is no default appender attached to root.
|
x
| A-x1, A-x2
| true
| A1, A-x1, A-x2
| Appenders of "x" and root.
|
x.y
| none
| true
| A1, A-x1, A-x2
| Appenders of "x" and root.
|
x.y.z
| A-xyz1
| true
| A1, A-x1, A-x2, A-xyz1
| Appenders in "x.y.z", "x" and root.
|
security
| A-sec
| false
| A-sec
| No appender accumulation since the additivity flag is set to false .
|
security.access
| none
| true
| A-sec
| Only appenders of "security" because the additivity flag in "security" is set to false . |
对于layoutQ也正如前面所qͼ是用来定义日志信息的输出格式Q它的与C语言?/span>printf
函数的格式定义基本相|本h对printf中的格式参数不太熟悉QL觉有些复杂,一般是qx看到自己认ؓ有用的格式就C下,到时直接搬过来。如
log4j.appender.R.layout.ConversionPattern=--->%-d{yyyy-MM-dd HH:mm:ss} [%5p]%l - %m%n
Ӟ日志信息格式为:
--->2008-07-11 01:13:40 [ INFO]com.test.Log4jTest.main(Log4jTest.java:27) - Exiting application.
好啦Q现在log4j的理论很肤浅地扯了一下,现在可以开始配|了?/span>
配置Q?/strong>
Log4j的配|可以通过加蝲Java的properties配置文g或者XML文g来完成?br />
Log4j默认的配|ؓQ通过dpȝ变量log4j.configuration来找到配|文Ӟ当然变量的默认gؓlog4j.propertiesQ所以若没有讄此系l变量,可以直接配|文件命名ؓlog4j.propertiesQ然后放到类路径下即可。另外,若想引用通过其它配置文gQ则可以通过
Loader.getResource(java.lang.String)来读取指定的配置文g?/span>
其它Q?/span>
1. ׃有了log4j中的U别l承机制Q所以可以很方便地过滤信息了Q不仅可以很方便地限制日志的输出量,也可以同时将日志输出C同的l端?br />
另外Q因为在java文g中,文g的物理层ơ关pM是直接通过“.”W号来控制的Q且在很在程度上q个物理层次也决定了文g的逻辑层次Q所以我们在当前文g中获取loggerӞ可以直接通过当前文g的类名来获取Q如Q?br />
static Logger logger = Logger.getLogger(MyApp.class);
q样Q在qo消息时就很简单了Q简单示例如下:
在配|文件中?br />
log4j.rootLogger=ERROR,stdout,R
log4j.category.com.db=DEBUG
log4j.category.com.i18n=INFO
log4j.category.com.zyx=fatal
默认的root logger的日志别ؓErrorQ根据别关p这个别也相当高了Q这样可以减系l中日志的输出量Q但有些地方可能得输出更详细信息Q如数据库部分,所以可以将com.db讄成了debug。另外,我在com.zyx下,我只想看到类型ؓfatal的日志,也可以如上所设?/span>
2. log4j.rootLogger=ERROR,stdout, ROLLING_FILEq个定义?/span>Croot logger的日志别ؓErrorQ后面的stdout, ROLLING_FILE表示此root有二个appenderQ通常可以通过q样来定义日志可以同时向多个l端输出Q因为子logger可以l承所有父logger的appender.
如我可以通过以下定义日志同时往console及file输出Q?/span>
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=--->%-d{yyyy-MM-dd HH:mm:ss} [%5p]%l - %m%n
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.File=myapp.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=1024KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=10
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern==[slf5s.start]%d{DATE}[slf5s.DATE]%n"
%p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n"
%c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n
|
马马虎虎ȝ了一下,但也p了二个多时Q呵呵!

]]>- Java正则表达式详?转蝲)http://www.tkk7.com/sy1214520/archive/2008/11/02/238172.html虫旺福虫旺福Sun, 02 Nov 2008 06:26:00 GMThttp://www.tkk7.com/sy1214520/archive/2008/11/02/238172.htmlhttp://www.tkk7.com/sy1214520/comments/238172.htmlhttp://www.tkk7.com/sy1214520/archive/2008/11/02/238172.html#Feedback0http://www.tkk7.com/sy1214520/comments/commentRss/238172.htmlhttp://www.tkk7.com/sy1214520/services/trackbacks/238172.html
如果你曾l用qPerl或Q何其他内建正则表辑ּ支持的语aQ你一定知道用正则表达式处理文本和匚w模式是多么简单。如果你不熟悉这个术语,那么“正则表达?#8221;QRegular ExpressionQ就是一个字W构成的Ԍ它定义了一个用来搜索匹配字W串的模式?/td>
|
许多语言Q包括Perl、PHP、Python、JavaScript和JScriptQ都支持用正则表辑ּ处理文本Q一些文本编辑器用正则表辑ּ实现高“搜烦-替换”功能。那么Java又怎样呢?本文写作Ӟ一个包含了用正则表辑ּq行文本处理的Java规范需求(Specification RequestQ已l得到认可,你可以期待在JDK的下一版本中看到它?/td>
|
然而,如果现在需要用正则表辑ּQ又该怎么办呢Q你可以从Apache.org下蝲源代码开攄Jakarta-ORO库。本文接下来的内容先要地介绍正则表达式的入门知识Q然后以Jakarta-ORO APIZ介绍如何使用正则表达式?/td>
|
我们先从单的开始。假设你要搜索一个包含字W?#8220;cat”的字W串Q搜索用的正则表辑ּ是“cat”。如果搜索对大小写不敏感Q单?#8220;catalog”?#8220;Catherine”?#8220;sophisticated”都可以匹配。也是_ |
假设你在玩英文拼字游戏,惌扑և三个字母的单词,而且q些单词必须?#8220;t”字母开_?#8220;n”字母l束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内宏V要构造出q个正则表达式,你可以用一个通配W——句点符?#8220;.”。这P完整的表辑ּ是“t.n”Q它匚w“tan”?#8220;ten”?#8220;tin”?#8220;ton”Q还匚w“t#n”?#8220;tpn”甚至“t n”Q还有其他许多无意义的组合。这是因为句点符号匹配所有字W,包括I格、Tab字符甚至换行W: |
Z解决句点W号匚w范围q于q泛q一问题Q你可以在方括号Q?#8220;[]”Q里面指定看来有意义的字W。此Ӟ只有Ҏ号里面指定的字符才参与匹配。也是_正则表达?#8220;t[aeio]n”只匹?#8220;tan”?#8220;Ten”?#8220;tin”?#8220;ton”。但“Toon”不匹配,因ؓ在方括号之内你只能匹配单个字W: |
如果除了上面匚w的所有单词之外,你还惌匚w“toon”Q那么,你可以?#8220;|”操作W?#8220;|”操作W的基本意义是“?#8221;q算。要匚w“toon”Q?#8220;t(a|e|i|o|oo)n”正则表达式。这里不能用方扩号Q因为方括号只允许匹配单个字W;q里必须使用圆括?#8220;()”。圆括号q可以用来分l,具体请参见后面介l?/td>
|
表一昄了表C匹配次数的W号Q这些符L来确定紧靠该W号左边的符号出现的ơ数Q?/td>
|
假设我们要在文本文g中搜索美国的C会安全L。这个号码的格式?99-99-9999。用来匹配它的正则表辑ּ如图一所C。在正则表达式中Q连字符Q?#8220;-”Q有着Ҏ的意义,它表CZ个范_比如??。因此,匚wC会安全L中的q字W号Ӟ它的前面要加上一个{义字W?#8220;\”?/td>
|
图一Q匹配所?23-12-1234形式的社会安全号?/p>
|
假设q行搜烦的时候,你希望连字符号可以出玎ͼ也可以不出现——即Q?99-99-9999?99999999都属于正的格式。这Ӟ你可以在q字W号后面加上“Q?#8221;数量限定W号Q如图二所C: |
图二Q匹配所?23-12-1234?23121234形式的社会安全号?/p>
|
下面我们再来看另外一个例子。美国汽车牌照的一U格式是四个数字加上二个字母。它的正则表辑ּ前面是数字部?#8220;[0-9]{4}”Q再加上字母部分“[A-Z]{2}”。图三显CZ完整的正则表辑ּ?/td>
|
“^”W号UCؓ“?#8221;W号。如果用在方括号内,“^”表示不想要匹配的字符。例如,囑֛的正则表辑ּ匚w所有单词,但以“X”字母开头的单词除外?/td>
|
假设要从格式?#8220;June 26, 1951”的生日日期中提取出月份部分,用来匚w该日期的正则表达式可以如图五所C: |
图五Q匹配所有Moth DD,YYYY格式的日?/p>
|
新出现的“\s”W号是空白符P匚w所有的I白字符Q包括Tab字符。如果字W串正确匚wQ接下来如何提取出月份部分呢Q只需在月份周围加上一个圆括号创徏一个组Q然后用ORO APIQ本文后面详l讨论)提取出它的倹{修改后的正则表辑ּ如图六所C: |
囑օQ匹配所有Month DD,YYYY格式的日期,定义月䆾gؓW一个组
|
为简便v见,你可以用一些ؓ常见正则表达式创建的快捷W号。如表二所C: |
例如Q在前面C会安全L的例子中Q所有出?#8220;[0-9]”的地Ҏ们都可以使用“\d”。修改后的正则表辑ּ如图七所C: |
图七Q匹配所?23-12-1234格式的社会安全号?/p>
|
有许多源代码开攄正则表达式库可供JavaE序员用,而且它们中的许多支持Perl 5兼容的正则表辑ּ语法。我在这里选用的是Jakarta-ORO正则表达式库Q它是最全面的正则表辑ּAPI之一Q而且它与Perl 5正则表达式完全兼宏V另外,它也是优化得最好的API之一?/td>
|
Jakarta-ORO库以前叫做OROMatcherQDaniel Savarese大方地把它赠送给了Jakarta Project。你可以按照本文最后参考资源的说明下蝲它?/td>
|
我首先将要介l用Jakarta-ORO库时你必d建和讉K的对象,然后介绍如何使用Jakarta-ORO API?/td>
|
首先Q创Z个Perl5Compilercȝ实例Qƈ把它赋值给PatternCompiler接口对象。Perl5Compiler是PatternCompiler接口的一个实玎ͼ允许你把正则表达式编译成用来匚w的Pattern对象?/td>
|
要把正则表达式编译成Pattern对象Q调用compiler对象的compile()ҎQƈ在调用参C指定正则表达式。例如,你可以按照下面这U方式编译正则表辑ּ“t[aeio]n”Q?/td>
|
默认情况下,~译器创Z个大写敏感的模式(patternQ。因此,上面代码~译得到的模式只匚w“tin”?#8220;tan”?“ten”?#8220;ton”Q但不匹?#8220;Tin”?#8220;taN”。要创徏一个大写不敏感的模式Q你应该在调用编译器的时候指定一个额外的参数Q?/td>
|
创徏好Pattern对象之后Q你可以通过PatternMatchercȝ该Pattern对象q行模式匚w?/td>
|
PatternMatcher对象ҎPattern对象和字W串q行匚w查。你要实例化一个Perl5Matchercdƈ把结果赋值给PatternMatcher接口。Perl5MatchercLPatternMatcher接口的一个实玎ͼ它根据Perl 5正则表达式语法进行模式匹配: |
使用PatternMatcher对象Q你可以用多个方法进行匹配操作,q些Ҏ的第一个参数都是需要根据正则表辑ּq行匚w的字W串Q?/td>
|
· boolean matches(String input, Pattern pattern)Q当输入字符串和正则表达式要_匚w时用。换句话_正则表达式必d整地描述输入字符丌Ӏ?/td>
|
· boolean matchesPrefix(String input, Pattern pattern)Q当正则表达式匹配输入字W串起始部分时用?/td>
|
· boolean contains(String input, Pattern pattern)Q当正则表达式要匚w输入字符串的一部分时用(卻I它必L一个子Ԍ?/td>
|
另外Q在上面三个Ҏ调用中,你还可以用PatternMatcherInput对象作ؓ参数替代String对象Q这Ӟ你可以从字符串中最后一ơ匹配的位置开始l进行匹配。当字符串可能有多个子串匚wl定的正则表辑ּӞ用PatternMatcherInput对象作ؓ参数很有用了。用PatternMatcherInput对象作ؓ参数替代StringӞ上述三个Ҏ的语法如下: |
· boolean matches(PatternMatcherInput input, Pattern pattern) |
· boolean matchesPrefix(PatternMatcherInput input, Pattern pattern) |
· boolean contains(PatternMatcherInput input, Pattern pattern) |
下面我们来看看Jakarta-ORO库的一些应用实例?/td>
|
dQ分析一个Web服务器日志文Ӟ定每一个用戯在网站上的时间。在典型的BEA WebLogic日志文g中,日志记录的格式如下: |
分析q个日志记录Q可以发玎ͼ要从q个日志文g提取的内Ҏ两项QIP地址和页面访问时间。你可以用分l符P圆括P从日志记录提取出IP地址和时间标记?/td>
|
首先我们来看看IP地址。IP地址?个字节构成,每一个字节的值在0?55之间Q各个字节通过一个句点分隔。因此,IP地址中的每一个字节有臛_一个、最多三个数字。图八显CZ为IP地址~写的正则表辑ּQ?/td>
|
IP地址中的句点字符必须q行转义处理Q前面加?#8220;\”Q,因ؓIP地址中的句点h它本来的含义Q而不是采用正则表辑ּ语法中的Ҏ含义。句点在正则表达式中的特D含义本文前面已l介l?/td>
|
日志记录的时间部分由一Ҏ括号包围。你可以按照如下思\提取出方括号里面的所有内容:首先搜烦起始Ҏ号字W(“[”Q,提取出所有不过l束Ҏ号字W(“]”Q的内容Q向前寻扄x到结束方括号字符。图九显CZq部分的正则表达式?/td>
|
现在Q把上述两个正则表达式加上分l符P圆括P后合q成单个表达式,q样可以从日志记录提取出IP地址和时间。注意,Z匚w“- -”Q但不提取它Q,正则表达式中间加入了“\s-\s-\s”。完整的正则表达式如囑֍所C?/td>
|
现在正则表达式已l编写完毕,接下来可以编写用正则表辑ּ库的Java代码了?/td>
|
Z用Jakarta-ORO库,首先创徏正则表达式字W串和待分析的日志记录字W串Q?/td>
|
q里使用的正则表辑ּ与图十的正则表达式差不多完全相同Q但有一点例外:在Java中,你必d每一个向前的斜杠Q?#8220;\”Q进行{义处理。图十不是Java的表CŞ式,所以我们要在每?#8220;\”前面加上一?#8220;\”以免出现~译错误。遗憄是,转义处理q程很容易出现错误,所以应该小心}慎。你可以首先输入未经转义处理的正则表辑ּQ然后从左到右依ơ把每一?#8220;\”替换?#8220;\\”。如果要复检Q你可以试着把它输出到屏q上?/td>
|
初始化字W串之后Q实例化PatternCompiler对象Q用PatternCompiler~译正则表达式创Z个Pattern对象Q?/td>
|
现在Q创建PatternMatcher对象Q调用PatternMatcher接口的contain()Ҏ查匹配情况: |
接下来,利用PatternMatcher接口q回的MatchResult对象Q输出匹配的l。由于logEntry字符串包含匹配的内容Q你可以看到cd下面的输出: |
下面一个Q务是分析HTML面内FONT标记的所有属性。HTML面内典型的FONT标记如下所C: |
在这U情况下Q我你用两个正则表辑ּ。第一个如囑֍一所C,它从字体标记提取?#8220;"face="Arial, Serif" size="+2" color="red"”?/td>
|
W二个正则表辑ּ如图十二所C,它把各个属性分割成名字-值对?/td>
|
现在我们来看看完成这个Q务的Java代码。首先创Z个正则表辑ּ字符Ԍ用Perl5Compiler把它们编译成Pattern对象。编译正则表辑ּ的时候,指定Perl5Compiler.CASE_INSENSITIVE_MASK选项Q得匹配操作不区分大小写?/td>
|
接下来,创徏一个执行匹配操作的Perl5Matcher对象?/td>
|
假设有一个Stringcd的变量htmlQ它代表了HTML文g中的一行内宏V如果html字符串包含FONT标记Q匹配器返回true。此Ӟ你可以用匚w器对象返回的MatchResult对象获得W一个组Q它包含了FONT的所有属性: |
接下来创Z个PatternMatcherInput对象。这个对象允怽从最后一ơ匹配的位置开始l进行匹配操作,因此Q它很适合于提取FONT标记内属性的名字-值对。创建PatternMatcherInput对象Q以参数形式传入待匹配的字符丌Ӏ然后,用匹配器实例提取出每一个FONT的属性。这通过指定PatternMatcherInput对象Q而不是字W串对象Qؓ参数Q反复地调用PatternMatcher对象的contains()Ҏ完成。PatternMatcherInput对象之中的每一ơP代将把它内部的指针向前移动,下一ơ检将从前一ơ匹配位|的后面开始?/td>
|
下面我们来看看另一个处理HTML的例子。这一ơ,我们假定Web服务器从widgets.acme.comUd了newserver.acme.com。现在你要修改一些页面中的链接: |
如果能够匚wq个正则表达式,你可以用下面的内Ҏ换图十三的链接: |
注意#字符的后面加上了$1。Perl正则表达式语法用$1?2{表C已l匹配且提取出来的组。图十三的表辑ּ把所有作Z个组匚w和提取出来的内容附加到链接的后面?/td>
|
现在Q返回Java。就象前面我们所做的那样Q你必须创徏试字符Ԍ创徏把正则表辑ּ~译到Pattern对象所必需的对象,以及创徏一个PatternMatcher对象Q?img style="width: 500px; height: 181px" alt="" src="http://www.ccw.com.cn/htm/app/aprog/01_7_31_4_v.jpg" border="0" _extended="true" /> |
接下来,用com.oroinc.text.regex包Utilcȝsubstitute()静态方法进行替换,输出l果字符Ԍ |
q个调用的前两个参数是以前创建的PatternMatcher和Pattern对象。第三个参数是一个Substiution对象Q它军_了替换操作如何进行。本例用的是Perl5Substitution对象Q它能够q行Perl5风格的替换。第四个参数是想要进行替换操作的字符Ԍ最后一个参数允许指定是否替换模式的所有匹配子ԌUtil.SUBSTITUTE_ALLQ,或只替换指定的次数?/td>
|
【结束语?/strong>在这文章中Q我Z介绍了正则表辑ּ的强大功能。只要正运用,正则表达式能够在字符串提取和文本修改中v到很大的作用。另外,我还介绍了如何在JavaE序中通过Jakarta-ORO库利用正则表辑ּ。至于最l采用老式的字W串处理方式Q用StringTokenizerQcharAtQ和substringQ,q是采用正则表达式,q就有待你自己决定了?/td>
|

]]> - 常用java date Ҏ集合http://www.tkk7.com/sy1214520/archive/2008/11/02/238171.html虫旺福虫旺福Sun, 02 Nov 2008 06:23:00 GMThttp://www.tkk7.com/sy1214520/archive/2008/11/02/238171.htmlhttp://www.tkk7.com/sy1214520/comments/238171.htmlhttp://www.tkk7.com/sy1214520/archive/2008/11/02/238171.html#Feedback0http://www.tkk7.com/sy1214520/comments/commentRss/238171.htmlhttp://www.tkk7.com/sy1214520/services/trackbacks/238171.html计算某一月䆾的最大天?br />
Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year); //year ?int
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月ؓ0
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
注:在用setҎ之前Q必dclear一下,否则很多信息会承自pȝ当前旉
2.Calendar和Date的{?br />
(1) Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();
(2) Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
3.格式化输出日期时?Q这个用的比较多Q?br />
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String time=df.format(date);
System.out.println(time);
4.计算一q中的第几星?br />
(1)计算某一天是一q中的第几星?br />
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno=cal.get(Calendar.WEEK_OF_YEAR);
(2)计算一q中的第几星期是几号
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.WEEK_OF_YEAR, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));
输出:
2006-01-02
5.add()和roll()的用?不太常用)
(1)add()Ҏ
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.add(Calendar.DATE, -4);
Date date=cal.getTime();
System.out.println(df.format(date));
cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
输出Q?br />
2006-08-30
2006-09-03
(2)rollҎ
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));
输出Q?br />
2006-09-29
2006-09-03
可见Qroll()Ҏ在本月内循环Q一般用add()ҎQ?br />
6.计算两个L旉中间的间隔天敎ͼq个比较常用Q?br />
(1)传进Calendar对象
public int getIntervalDays(Calendar startday,Calendar endday)...{
if(startday.after(endday))...{
Calendar cal=startday;
startday=endday;
endday=cal;
}
long sl=startday.getTimeInMillis();
long el=endday.getTimeInMillis();
long ei=el-sl;
return (int)(ei/(1000*60*60*24));
}
(2)传进Date对象
public int getIntervalDays(Date startday,Date endday)...{
if(startday.after(endday))...{
Date cal=startday;
startday=endday;
endday=cal;
}
long sl=startday.getTime();
long el=endday.getTime();
long ei=el-sl;
return (int)(ei/(1000*60*60*24));
}
(3)改进_计算盔R天数的方?br />
public int getDaysBetween (Calendar d1, Calendar d2) ...{
if (d1.after(d2)) ...{
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2) ...{
d1 = (Calendar) d1.clone();
do ...{
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天?br />
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
注意Q通过上面的方法可以衍生出求Q何时_如要查出邮箱三周之内收到的邮Ӟ得到当前pȝ旉Q再得到三周前时_用收件的旉d?最好装化成 longL?br />
如:1q前日期Q注意毫U的转换Q?br />
java.util.Date myDate=new java.util.Date();
long myTime=(myDate.getTime()/1000)-60*60*24*365;
myDate.setTime(myTime*1000);
String mDate=formatter.format(myDate);
7. String ?Date QLong 之间怺转换 Q最常用Q?br />
字符串{化成旉cdQ字W串可以是Q意类型,只要和SimpleDateFormat中的格式一致即可)
通常我们取时间跨度的时候,会substring出具体时_QlongQ比?br />
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");
long dvalue=d.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mDateTime1=formatter.format(d);
8. 通过旉求时?br />
q月周求日期
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
java.util.Date date2= formatter2.parse("2003-05 5 星期?);
SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
String mydate2=formatter3.format(date2);
求是星期?br />
mydate= myFormatter.parse("2001-1-1");
SimpleDateFormat formatter4 = new SimpleDateFormat("E");
String mydate3=formatter4.format(mydate);
9. java ?具体的数据库l合
在开发web应用中,针对不同的数据库日期cdQ我们需要在我们的程序中Ҏ期类型做各种不同的{换。若对应数据库数据是oracle的DatecdQ即只需要年月日的,可以选择使用java.sql.DatecdQ若对应的是MSsqlserver 数据库的DateTimecdQ即需要年月日时分U的Q选择java.sql.Timestampcd
你可以用dateFormat定义旉日期的格式,转一个字W串卛_
class Datetest{
*method 字W串cd的日期{换ؓ一个timestampQ时间戳记java.sql.TimestampQ?br />
*@param dateString 需要{换ؓtimestamp的字W串
*@return dataTime timestamp
public final static java.sql.Timestamp string2Time(String dateString)
throws java.text.ParseException {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//讑֮格式
//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//utilcd
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestampcd,timeDate.getTime()q回一个long?br />
return dateTime;
}
*method 字W串cd的日期{换ؓ一个DateQjava.sql.DateQ?br />
*@param dateString 需要{换ؓDate的字W串
*@return dataTime Date
public final static java.sql.Date string2Date(String dateString)
throws java.lang.Exception {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//utilcd
java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sqlcd
return dateTime;
}
public static void main(String[] args){
Date da = new Date();
注意Q这个地方da.getTime()得到的是一个long型的?br />
System.out.println(da.getTime());
由日期date转换为timestamp
W一U方法:使用new Timestamp(long)
Timestamp t = new Timestamp(new Date().getTime());
System.out.println(t);
W二U方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)
Timestamp tt = new Timestamp(Calendar.getInstance().get(
Calendar.YEAR) - 1900, Calendar.getInstance().get(
Calendar.MONTH), Calendar.getInstance().get(
Calendar.DATE), Calendar.getInstance().get(
Calendar.HOUR), Calendar.getInstance().get(
Calendar.MINUTE), Calendar.getInstance().get(
Calendar.SECOND), 0);
System.out.println(tt);
try {
String sToDate = "2005-8-18";//用于转换成java.sql.Date的字W串
String sToTimestamp = "2005-8-18 14:21:12.123";//用于转换成java.sql.Timestamp的字W串
Date date1 = string2Date(sToDate);
Timestamp date2 = string2Time(sToTimestamp);
System.out.println("Date:"+date1.toString());//l果昄
System.out.println("Timestamp:"+date2.toString());//l果昄
}catch(Exception e) {
e.printStackTrace();
}
}
}

]]> - java中各U排?/title>http://www.tkk7.com/sy1214520/archive/2008/06/19/209127.html虫旺福虫旺福Thu, 19 Jun 2008 04:00:00 GMThttp://www.tkk7.com/sy1214520/archive/2008/06/19/209127.htmlhttp://www.tkk7.com/sy1214520/comments/209127.htmlhttp://www.tkk7.com/sy1214520/archive/2008/06/19/209127.html#Feedback0http://www.tkk7.com/sy1214520/comments/commentRss/209127.htmlhttp://www.tkk7.com/sy1214520/services/trackbacks/209127.html阅读全文

]]> - Java对各U文件的操作详解http://www.tkk7.com/sy1214520/archive/2008/06/19/209120.html虫旺福虫旺福Thu, 19 Jun 2008 03:40:00 GMThttp://www.tkk7.com/sy1214520/archive/2008/06/19/209120.htmlhttp://www.tkk7.com/sy1214520/comments/209120.htmlhttp://www.tkk7.com/sy1214520/archive/2008/06/19/209120.html#Feedback0http://www.tkk7.com/sy1214520/comments/commentRss/209120.htmlhttp://www.tkk7.com/sy1214520/services/trackbacks/209120.html阅读全文

]]>
վ֩ģ壺
3344߿Ƭ|
˾þۺ|
㽶ѿһ|
ŮվɫƵѹ|
պĻ|
91ɫŮԴվ|
þƷVA|
þùһ|
þaƬ|
99re6ƵƷ|
˾þþƷ|
AƬѹۿ|
ëƬר|
ѻɫַ|
AV˵߹ۿ|
պƵ|
ѹվ߿|
ƷĻþò|
ѿһ|
Ʒ߾ƷƵ|
ڵƵ
|
Һվ|
ŮڵƵվ|
ɫwwwƷƵѿ|
þþƷ|
Ʒһʽâ|
ձƵ߹ۿ|
ձ19žžڵѶͼ|
ϵվۿ|
Ʒһ|
99þþƷձһ|
Ʒһ23Ŀ|
av鶹aӰ|
һƬaѲſ|
һëƬĻ|
պ߹ۿƵ|
99Ʒaѿ|
avרߵӰ|
Ʒþþþþþþþþþ
|
ҳַȫѹۿ12վ|
Ʒһ
|