用String.substring方法,不小心会有越界异常。现实现一个没抛出越界异常,越界就返回null,不过直接返回的再用其它方法,可能有Null异常。现还实现可以负index的,可能逆向的。
package com.chenlb.util;
public class StringUtil {
/**
* start与end均可负数<br/>
* start < end正向取, start > end逆向取<br/>
* 示例:str="I am chenlb"<br/>
* StringUtil.substring(str, 0, 12) -> null<br/>
* StringUtil.substring(str, 12, 12) -> null<br/>
* StringUtil.substring(str, 12, 13) -> null<br/>
* StringUtil.substring(str, 4, 4) -> ""<br/>
* StringUtil.substring(str, 0, 4) -> "I am"<br/>
* StringUtil.substring(str, -4, -1) -> "enl"<br/>
* StringUtil.substring(str, -2, 4) -> "lbI am"<br/>
* StringUtil.substring(str, 4, 0) -> "ma I"<br/>
* StringUtil.substring(str, -1, -4) -> "lne"<br/>
* StringUtil.substring(str, 1, -4) -> "Iblne"<br/>
* StringUtil.substring(str, 0, -4) -> "blne"<br/>
* StringUtil.substring(str, -4, 0) -> "enlb"<br/>
* @return 越界返回null, start==end返回空
* @author chenlb 2008-6-18 下午12:39:51
*/
public static String substring(String str, int start, int end) {
if(str == null) {
return null;
}
int len = str.length();
if(Math.abs(start) >= len) {
return null;
}
if(Math.abs(end) > len) {
return null;
}
StringBuilder sb = new StringBuilder();
if(end > start) { //正向
substring(sb, str, start, end);
} else if(end == start) {
return "";
} else { //逆向 end < start
substring(sb, str, end, start);
sb.reverse();
}
return sb.toString();
}
private static void substring(StringBuilder sb, String str, int start, int end) {
int len = str.length();
if(start < 0) {
if(end < 0) {
sb.append(str.substring(len+start, len+end));
} else {
sb.append(str.substring(len+start, len));
sb.append(str.substring(0, end));
}
} else {
sb.append(str.substring(start, end));
}
}
}
测试代码:
public void testSubstring() {
String str = "I am chenlb";
assertEquals(null, StringUtil.substring(str, 0, 12));
assertEquals(null, StringUtil.substring(str, 12, 12));
assertEquals(null, StringUtil.substring(str, 12, 13));
assertEquals("", StringUtil.substring(str, 4, 4));
assertEquals("I am", StringUtil.substring(str, 0, 4));
assertEquals("am", StringUtil.substring(str, 2, 4));
assertEquals("I am chenlb", StringUtil.substring(str, 0, 11));
assertEquals("enl", StringUtil.substring(str, -4, -1));
assertEquals("lbI am", StringUtil.substring(str, -2, 4));
assertEquals("ma I", StringUtil.substring(str, 4, 0));
assertEquals("lne", StringUtil.substring(str, -1, -4));
assertEquals("Iblne", StringUtil.substring(str, 1, -4));
assertEquals("blne", StringUtil.substring(str, 0, -4));
assertEquals("enlb", StringUtil.substring(str, -4, 0));
}
posted @
2008-06-24 13:53 流浪汗 阅读(546) |
评论 (0) |
编辑 收藏
Windows网络命令行程序
ipconfig /all 查看配置
ipconfig /renew 刷新配置
ipconfig 管理 DNS 和 DHCP 类别 ID
Ping 测试连接
Arp 解决硬件地址问题
nbtstat 解决 NetBIOS 名称问题
netstat 显示连接统计
tracert 跟踪网络连接
pathping 测试路由器
posted @
2008-06-24 13:51 流浪汗 阅读(262) |
评论 (0) |
编辑 收藏
今天运行下程序,报错说“内存不够”。在Tomcat可以扩大JVM的内存栈呢?然后看那bin目录下启动文件,找到catalina.bat文件的JAVA_OPTS(大概在103行,5.5.X),在再添加一个set JAVA_OPTS参数即可如:
set JAVA_OPTS=%JAVA_OPTS% -Xms100m -Xmx512m
posted @
2008-06-24 13:49 流浪汗 阅读(366) |
评论 (0) |
编辑 收藏
前段时间学习Linux命令,偶然发现curl命令很有用。这里简单介绍下。网络上部分解析是:curl是一个利用URL语法在命令行方式下工作的文件传输工具。
它可以取得有规律的url的内容。比如:http://www.example.com/001.html 到 http://www.example.com/100.html ,它有一种表达式可以这些内容下载下来,这功能绝对比迅雷强,迅雷只支持一个变量,curl只你喜欢可任意多。它可继点续传,提交表单……
来看下简单的使用:
1.查看响应的头
curl -I http://chenlb.javaeye.com
现在正如robbin说的可以看下X-Runtime: 0.47101
2.在学校要代理才可以上javaeye.com。用-x设代理
curl -x proxy.gdut.edu.cn:8080 -I http://chenlb.javaeye.com
3.把返回的内容保存下来,用-o filename参数
curl -o chenlb.html http://chenlb.javaeye.com
4.保存内容时要filename很烦,用一个-O参数来指定用服务器的文件名,这个批量下载很有用。
curl -O http://baike.baidu.com/view/[1-2].htm
批量下载百科的1.htm 2.htm两个页面,这功能够强。
我常用的就是以上四个。
5.很多要referer的,有-e参数可以设置
curl -o me.html -e http://www.javaeye.com http://chenlb.javaeye.com
还有很多很多参数,留给大家去发现,比如:发送数据,提交表单,设置用户与密码,用什么协议啊……
posted @
2008-06-24 13:47 流浪汗 阅读(1491) |
评论 (0) |
编辑 收藏
java命令引入jar时可以-cp参数,但时-cp不能用通配符(多个jar时什么烦要一个个写,不能*.jar),面通常的jar都在同一目录,且多于1个。前些日子找到(发现)-Djava.ext.dirs太好。
如:
java -Djava.ext.dirs=lib MyClass
posted @
2008-06-22 23:58 流浪汗 阅读(5071) |
评论 (0) |
编辑 收藏
javascript xslt 处理xml备忘录。支持firefox。
参考:
w3school XSLT - 客户端
http://www.w3school.com.cn/xsl/xsl_client.asp
如何使用Javascript XSLT 处理XML文件
http://java.chinaitlab.com/advance/533787.html
1.xml文件,cdcatalog.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited with XML Spy v2007 (http://www.altova.com) -->
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
</catalog>
2.xsl文件,cdcatalog.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited with XML Spy v2007 (http://www.altova.com) -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/>
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
3.html文件,index.html
<html>
<body>
<script type="text/javascript">
var xml;
var xsl;
if(typeof window.ActiveXObject != 'undefined') {
xml = new ActiveXObject("Microsoft.XMLDOM");
xsl = new ActiveXObject("Microsoft.XMLDOM");
} else if(document.implementation && document.implementation.createDocument) { //mozilla
xml = document.implementation.createDocument("", "", null);
xsl = document.implementation.createDocument("", "", null);
}
// Load XML
xml.async = false;
xml.load("cdcatalog.xml");
// Load XSL
xsl.async = false;
xsl.load("cdcatalog.xsl");
// Transform
if(typeof window.ActiveXObject != 'undefined') {
document.write(xml.transformNode(xsl));
} else if(document.implementation && document.implementation.createDocument) { //mozilla
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
// transformToDocument方式
var result = xsltProcessor.transformToDocument(xml);
var xmls = new XMLSerializer();
document.write(xmls.serializeToString(result));
}
</script>
</body>
</html>
posted @
2008-05-18 19:02 流浪汗 阅读(787) |
评论 (1) |
编辑 收藏
摘要: 自己实现的优先队列 PriorityQueue
阅读全文
posted @
2008-05-08 23:08 流浪汗 阅读(1002) |
评论 (0) |
编辑 收藏
想到局域网上建一个dns服务器,昨天晚上搞了好久都不成,包括今天也发了好多时间也不能通过.最后找到
秋水小筑之Blog
http://blog.chinaunix.net/u/5302/showart_238337.html
的博客, 帮了大忙,网上的很多文章都试过了都没有很好的结果.
我安装的centos是单CD的服务版本.安装后已经有bind了
1.配置文件在/etc/named.conf
//
// named.conf for Red Hat caching-nameserver
//
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};
//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "chenlb.com" IN {
type master;
file "chenlb.com.zone";
allow-query { any; };
allow-transfer { any; };
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.ip6.local";
allow-update { none; };
};
zone "255.in-addr.arpa" IN {
type master;
file "named.broadcast";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.zero";
allow-update { none; };
};
include "/etc/rndc.key";
只要添加一个zone就行,看上面
zone "chenlb.com" IN {
type master;
file "chenlb.com.zone";
allow-query { any; };
allow-transfer { any; };
allow-update { none; };
};
2.在/var/named/chroot/var/named/目录里建个chenlb.com.zone(上面的file),内容如下:
$TTL 86400
@ IN SOA chenlb.com. root.chenlb.com.(
2008050201 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS chenlb.com.
IN MX 10 mail.chenlb.com.
@ IN A 192.168.0.60
www IN A 192.168.0.60
ftp IN A 192.168.0.60
mail IN A 192.168.0.60
3.在/var/named目录下建链接
# ch /var/named
# ln -s /var/named/chroot/var/named/chenlb.com.zone chenlb.com.zone
4.启动named
# /etc/init.d/named start
5.测试前添加nds服务地址
# vi /etc/resolv.conf
在加
nameserver 192.168.0.60
search chenlb.com
说明:192.168.0.60是我本机地址
现在本机下可以ping www.chenlb.com了
要在加的机上可以使用DNS服务,要在防火墙里允许
6.修改/etc/sysconfig/iptables添加下面的
-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
OK,现在在win里添加dns地址192.168.0.60就在ping www.chenlb.com了. 呵呵
posted @
2008-05-02 20:46 流浪汗 阅读(1006) |
评论 (0) |
编辑 收藏
昨天安装好了lighttpd,现在想试下与tomcat的一起工作。把所有的*.jsp让tomcat去处理。用到lighttpd的代理,lighttpd与tomcat比apache与tomcat要简单多。开始喜欢上了lighttpd。
修改lighttpd的配置
# vi /usr/local/lighttpd-1.4.19/lighttpd.conf
去掉mod_proxy注释
server.modules = (
#...
# "mod_proxy",
#...
)
去掉proxy.server注释
proxy.server = ( ".jsp" =>
( "localhost" =>
(
"host" => "192.168.0.60",
"port" => 8080
)
)
)
重启lighttpd,然后
http://192.168.0.60/index.jsp就可以看到tomcat的页面了。
posted @
2008-05-02 00:03 流浪汗 阅读(2270) |
评论 (0) |
编辑 收藏
近几日都想玩下服务器。此文是在linux下的lighttpd安装php。参考 的博客:
http://blog.csdn.net/shined_zhang/archive/2007/10/28/1852349.aspx
1.安装lighttpd看
http://www.blogjava.net/chenlb/archive/2008/04/30/197617.html
2.安装mysql看
http://www.blogjava.net/chenlb/archive/2007/03/20/105114.html
3.安装php,先到
http://www.php.net 下载,我下载的是php-5.2.5
# tar -zxvf php-5.2.5.tar.gz
# cd php-5.2.5
#./configure --prefix=/usr/local/php-5.2.5 --enable-fastcgi --with-mysql=/usr/local/mysql --enable-zend-multibyte --with-config-file-path=/usr/local/php-5.2.5/conf --enable-discard-path --enable-force-cgi-redirect
# make
# make install
#mkdir /usr/local/php-5.2.5/conf
#cp php.ini-dist /usr/local/php-5.2.5/conf/php.ini
我在安装过程中也出过问题,说我没有找到xml2。要yum install libxml2*一下。
4.修改lighttpd的配置。 把mod_fastcgi去掉注释。
# vi /usr/local/lighttpd-1.4.19/lighttpd.conf
server.modules = (
#
# "mod_fastcgi",
#
)
找到fastcgi.server去掉注释,修改后看起来像。
fastcgi.server = ( ".php" =>
( "localhost" =>
(
"socket" => "/usr/local/lighttpd-1.4.19/php-fastcgi.socket",
"bin-path" => "/usr/local/php-5.2.5/bin/php-cgi"
)
)
)
5.php测试页面phpinfo.php放到你的www目录下。
<?php
echo phpinfo();
?>
最后启动或重启lighttpd即可。
posted @
2008-05-01 16:48 流浪汗 阅读(1155) |
评论 (0) |
编辑 收藏