??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阅读全文

虫旺福 2010-04-14 17:58 发表评论
]]>
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/

虫旺福 2010-02-01 09:33 发表评论
]]>
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阅读全文

虫旺福 2009-07-15 14:24 发表评论
]]>
java性能优化Q^时应该注意的事情。不一定全寏V?/title><link>http://www.tkk7.com/sy1214520/archive/2008/12/22/247733.html</link><dc:creator>虫旺福</dc:creator><author>虫旺福</author><pubDate>Mon, 22 Dec 2008 04:05:00 GMT</pubDate><guid>http://www.tkk7.com/sy1214520/archive/2008/12/22/247733.html</guid><wfw:comment>http://www.tkk7.com/sy1214520/comments/247733.html</wfw:comment><comments>http://www.tkk7.com/sy1214520/archive/2008/12/22/247733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/sy1214520/comments/commentRss/247733.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/sy1214520/services/trackbacks/247733.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.tkk7.com/sy1214520/archive/2008/12/22/247733.html'>阅读全文</a><img src ="http://www.tkk7.com/sy1214520/aggbug/247733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/sy1214520/" target="_blank">虫旺福</a> 2008-12-22 12:05 <a href="http://www.tkk7.com/sy1214520/archive/2008/12/22/247733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>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呵呵!



虫旺福 2008-11-10 23:24 发表评论
]]>
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”都可以匹配。也是_
1.1 句点W号
假设你在玩英文拼字游戏,惌扑և三个字母的单词,而且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:
1.2 ҎL?/strong>
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:
1.3 “?#8221;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>
1.4 表示匚wơ数的符?/strong>
表一昄了表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>

图三Q匹配典型的国汽R牌照LQ如8836KV

1.5 “?#8221;W号
“^”W号UCؓ“?#8221;W号。如果用在方括号内,“^”表示不想要匹配的字符。例如,囑֛的正则表辑ּ匚w所有单词,但以“X”字母开头的单词除外?/td>

囑֛Q匹配所有单词,?#8220;X”开头的除外

1.6 圆括号和I白W号
假设要从格式?#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一个组

1.7 其它W号
为简便v见,你可以用一些ؓ常见正则表达式创建的快捷W号。如表二所C:
表二Q常用符?/td>

例如Q在前面C会安全L的例子中Q所有出?#8220;[0-9]”的地Ҏ们都可以使用“\d”。修改后的正则表辑ּ如图七所C:

图七Q匹配所?23-12-1234格式的社会安全号?/p>

二、Jakarta-ORO?/font>
有许多源代码开攄正则表达式库可供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>
?PatternCompiler对象
首先Q创Z个Perl5Compilercȝ实例Qƈ把它赋值给PatternCompiler接口对象。Perl5Compiler是PatternCompiler接口的一个实玎ͼ允许你把正则表达式编译成用来匚w的Pattern对象?/td>
?Pattern对象
要把正则表达式编译成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对象
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)

 
三、应用实?/font>
下面我们来看看Jakarta-ORO库的一些应用实例?/td>
3.1 日志文g处理
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>

囑օQ匹配IP地址

IP地址中的句点字符必须q行转义处理Q前面加?#8220;\”Q,因ؓIP地址中的句点h它本来的含义Q而不是采用正则表辑ּ语法中的Ҏ含义。句点在正则表达式中的特D含义本文前面已l介l?/td>
日志记录的时间部分由一Ҏ括号包围。你可以按照如下思\提取出方括号里面的所有内容:首先搜烦起始Ҏ号字W(“[”Q,提取出所有不过l束Ҏ号字W(“]”Q的内容Q向前寻扄x到结束方括号字符。图九显CZq部分的正则表达式?/td>

图九Q匹配至一个字W,直至扑ֈ“]”

现在Q把上述两个正则表达式加上分l符P圆括P后合q成单个表达式,q样可以从日志记录提取出IP地址和时间。注意,Z匚w“- -”Q但不提取它Q,正则表达式中间加入了“\s-\s-\s”。完整的正则表达式如囑֍所C?/td>

囑֍Q匹配IP地址和时间标?/p>

现在正则表达式已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下面的输出:
3.2 HTML处理实例一
下面一个Q务是分析HTML面内FONT标记的所有属性。HTML面内典型的FONT标记如下所C:
E序按照如下Ş式,输出每一个FONT标记的属性:
在这U情况下Q我你用两个正则表辑ּ。第一个如囑֍一所C,它从字体标记提取?#8220;"face="Arial, Serif" size="+2" color="red"”?/td>

囑֍一Q匹配FONT标记的所有属?/p>

W二个正则表辑ּ如图十二所C,它把各个属性分割成名字-值对?/td>

囑֍二:匚w单个属性,q把它分割成名字-值对

分割l果为:
现在我们来看看完成这个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>
本例的输出结果如下:
3.3 HTML处理实例?/strong>
下面我们来看看另一个处理HTML的例子。这一ơ,我们假定Web服务器从widgets.acme.comUd了newserver.acme.com。现在你要修改一些页面中的链接:
执行q个搜烦的正则表辑ּ如图十三所C:

囑֍三:匚w修改前的链接

如果能够匚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果字符Ԍ
Util.substitute()Ҏ的语法如下:
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>



虫旺福 2008-11-02 14:26 发表评论
]]>
常用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();
}
}



虫旺福 2008-11-02 14:23 发表评论
]]>
java中各U排?/title><link>http://www.tkk7.com/sy1214520/archive/2008/06/19/209127.html</link><dc:creator>虫旺福</dc:creator><author>虫旺福</author><pubDate>Thu, 19 Jun 2008 04:00:00 GMT</pubDate><guid>http://www.tkk7.com/sy1214520/archive/2008/06/19/209127.html</guid><wfw:comment>http://www.tkk7.com/sy1214520/comments/209127.html</wfw:comment><comments>http://www.tkk7.com/sy1214520/archive/2008/06/19/209127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/sy1214520/comments/commentRss/209127.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/sy1214520/services/trackbacks/209127.html</trackback:ping><description><![CDATA[     摘要: 把以前ȝ的一个java常用排序整理了一下? 插入排序Q? package org.rut.util.algorithm.support;       import org.rut.util.algorithm.SortUtil;    /** *//** &nb...  <a href='http://www.tkk7.com/sy1214520/archive/2008/06/19/209127.html'>阅读全文</a><img src ="http://www.tkk7.com/sy1214520/aggbug/209127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/sy1214520/" target="_blank">虫旺福</a> 2008-06-19 12:00 <a href="http://www.tkk7.com/sy1214520/archive/2008/06/19/209127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>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阅读全文

虫旺福 2008-06-19 11:40 发表评论
]]>
վ֩ģ壺 3344߿Ƭ| ޹˾þۺ| 㽶ѿһ| ŮվɫƵѹ| պĻ| 91ɫŮԴվ| þ޾ƷVA| þùһ| þ޳aƬ| 99re6ƵƷ| ޹˾þþƷ| AƬѹۿ| ëƬר| ѻɫַ| AV˵߹ۿ| պƵ| ѹվ߿| ޾ƷĻþò| ѿһ| ޾Ʒ߾ƷƵ| ڵƵ | ޾Һվ| ŮڵƵվ| ɫwwwƷƵѿ| þþ޾Ʒ| Ʒһʽâ| ձƵ߹ۿ| ձ19žžڵѶͼ| ϵվۿ| ޹Ʒһ| 99þþƷձһ| ޾Ʒһ23Ŀ| av鶹aӰ| һƬaѲſ| һëƬĻ| պ߹ۿƵ| 99Ʒaѿ| avרߵӰ| ޾Ʒþþþþþþþþþ | ҳַȫѹۿ12վ| Ʒһ |