博文

(原创)按字节截取含有中文汉字的字符串(2008-07-21 00:32:00)

摘要:  Java中1个char类型的变量可存储任意编码的1个字符,如1个ASC码和或1个中文字符,例如:含有3个ASC和含有3个汉字字符的字符串长度是一样的:     "1ac".length()==3;     "你好a".length()=3; 但上述两个字符串所占的byte是不一样的,前者是3,后者是5(1个汉字2byte)。 请编写函数:     public static String leftStr(String source, int maxByteLen)   从source中取最大maxByteLen个byte的子串。当最后一个byte恰好为一个汉字的前半个字节时,舍弃此byte。例如:      String str="我LRW爱JAVA";     leftStr(str,1)=="";     leftStr(str,2)=="我";     leftStr(str,4)=="我LR";     leftStr(str,11)=="我LRW";或者,当最后一个byte恰好为一个汉字的前半个字节时,补全汉字(多截取一个byte)。例如:      String str="我LRW爱JAVA";     leftStr(str,1)=="我";     leftStr(str,2)=="我";     leftStr(str,4)=="我LR";     leftStr(str,11)=="我LRW爱";......

阅读全文(7818) | 评论:1

(原创)正则判断时间(2008-07-19 23:52:00)

摘要:  刚刚学习正则,正则正是很好很强大的东西。   练习下,时间格式为“HH:mm:ss”或“HH:mm”,采用24小时制。 普通方法为,分离出小时、分钟、秒分别进行判断:      public static boolean timeCheck(String time, String owner) {        //检查时间字符串time是否满足格式“HH:mm:ss”或“HH:mm”,若不满足显示相应消息,并返回false        if(time.equals("")){            String msg = owner+" : "+"Time is EMPTY.";            MessageDialog.showError(Controller.getMainFrame(), msg);            return false;        }        int hours, minutes, seconds = 0;        StringTokenizer st = new......

阅读全文(2944) | 评论:0

(原创)JavaToHtml(2008-07-19 19:40:00)

摘要:  为了方便在blog中粘贴源代码,特意找了这方面的工具(本来琢磨自己写,可惜能力有限,再次受打击了~~~) JavaToHtml开源,Eclipse Plugin   大家都知道读源代码很累,读乱七八糟的源代码那就想吐了,所以格式化源代码还是很有必要的,不信看看下面的例子。 格式化后的漂亮效果: import java.util.Vector;public class Stack<T> {    private Vector<T> content;    public Stack() {        content = new Vector<T>();    }    public void push(T t) {        content.add(t);    }    public T peek() {        if (content.size() == 0) {            return null;        }        return content.get(content.size() -&......

阅读全文(2844) | 评论:1

(原创)JAVA只有值传递(2008-07-25 15:36:00)

摘要:  不明白怎么那么多人对JAVA中的参数传递有疑问,Think In Java中指出“JAVA中只有值传递”(见3rd Edition P78注释1)。我觉得记住这点挺重要的。   参数传递有“值传递”和“引用传递”之分,那么首先要弄清楚什么是“值传递”,什么是“引用传递”,其区分准则是什么?(参考http://hi.baidu.com/alljava/blog/item/6dddd4ca4f19be46f31fe765.html)   区分准则:形参和实参的关系。如果形参是实参的拷贝,则为值传递;否则,如果形参是实参的引用,则为引用传递。  显然,引用传递,改变形参的值将会影响实参;而值传递改变形参的值不会影响实参。  不能根据实参为引用就判定为引用传递,也就是要区分传递引用与引用传递。   引用传递是C++的特性(C#等其它后继语言可能也沿袭了),其典型例子如下:#include <iostream> using namespace std; //值传递 //形参是实参的拷贝 void swapByValueTranf(int a, int b){ cout<<"形参地址: a = "<<&a<<", b = "<<&b<<" | swapByValueTranf"<<endl; int t = a; a = b; b = t; } //引用传递 //形参是实参的引用 void swapByReferenceTranf(int &a, int &b){ cout<<"形参地址: a = "<<&a<<", b = "<<&b<<" | swapByReferenceTranf"<<endl; int t = a; a = b; b = t; } void swapWithNonSense(int* a, int* b){ cout<<"形参地址: a = "<<&a<<", b = "<<......

阅读全文(5107) | 评论:0

(转)JAVA经典例子(2008-07-19 19:56:00)

摘要:摘自http://topic.csdn.net/u/20080617/15/706679c5-e108-4ec0-801b-75728ad19fe6.html 1.一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 package com.softeem.demo;/** *@author leno *动物的接口 */interface Animal {    public void eat(Food food);}/** *@author leno *一种动物类:猫 */class Cat implements Animal {    public void eat(Food food) {        System.out.println("小猫吃" + food.getName());    }}/** *@author leno *一种动物类:狗 */class Dog implements Animal {    public void eat(Food food) {        System.out.println("小狗啃" + food.getName());    }}/** *@author leno *食物抽象类 */abstract class Food {    pro......

阅读全文(4925) | 评论:0

(转)我眼中的Java经典书籍(2008-07-13 04:55:00)

摘要:摘自http://www.knowsky.com/364533.html   什么叫“经典书籍”呢?     以往我们说,“一流的公司定标准,二流的公司搞技术, 三流的公司做服务,末流的公司卖产品”,其实这话并非全无道理。厌恶M$的人不少,但嘴上骂归骂,底下照样用Windows, 赌咒发誓不用的也未必不想暗地里钻研一下其中的技术,再狠点,干脆只看Linux的字符界面,连X都不用。 然而为啥不见哪位仁兄自己只玩自己弄的OS呢?M$和UNIX家族在OS上显然是具有语言霸权, OS搞到这份上基本上就是“标准”了,你愿意白手起家?呵呵~~~     说了这些废话,我无非想说的是,所谓Java的“经典书籍”,最好的就是Java的标准,也就是SUN的官方资料: From java.sun.comJavaTM 2 SDK, Standard Edition Documentation Version 1.4.2 [下载] JavaTM 2 Platform, Standard Edition, v 1.4.2 API Specification [下载] JavaTM 2 Platform Enterprise Edition, v 1.4 API Specification [下载] The Java Language Specification, Second Edition [下载] The JavaTM Virtual Machine Specification, Second Edition [下载] Java 2 Platform, Standard Edition, White Papers The Java Tutorial [下载] The J2EE 1.4 Tutorial [下载] The Swing Tutorial SUN官方系列推荐书目 Thinking in JavaJava 编程思想by BrUCe Eckel第一版京京工作室译本[下载]第二版候捷译本[下载(部分章节)]第三版原版[下载] [翻译(部分章节)][本书主页]书评: (2004-5-28)      说TIJ是“经典”想必不会有什么人反对,然而也许有人说这......

阅读全文(415) | 评论:0

(转)了解Java密码扩展的基础(2008-07-19 20:08:00)

摘要:摘自http://www.knowsky.com/362221.html Java密码扩展(The Java Cryptography Extension),是JDK1.4的一个重要部分,基本上,他是由一些包构成的,这些包形成了一个框架并实现了一些加密,密钥生成算法和协议,消息认证码等算法,这篇文章将想你介绍JCE的安装和使用。    值得注重的是,尽管JCE是JDK1.4的核心包的一部分,我们将首先用JDK1.2及高一点的版本向你演示一下假如安装配置JCE(静态安装)。稍后,将向你介绍如何在不安装的情况下使用JCE(动态安装)。最后,将演示怎么生成密钥和密码,及假如进行基本的加密.解密。提供者是什么?    提供者是特定加密算法的实现者,有的提供者(提供的加密技术)是免费的,有的不免费,IBM, Bouncy Castle, 和 RSA都是一些(加密)提供者.在本文的后面,我们将考察一下来自Bouncy Castle的RSA算法。Sun 也向大家说明了假如实现自己的提供者(需要符合jDK的一些约定)。静态安装    在安装和使用JCE之前,你需要从 Sun Web site(这里是以暗中sun的提供者为例).获得他的安装包,JCE有sun他自己的安全提供者-sunJCE,为了吧sunJCE静态的安装到默认的提供者列表中,你需要修改安全属性文件:•    <java-home>\jre\lib\security\java.security (Win32) •    <java-home>/jre/lib/security/java.security (UNIX)假如你把JDK安装在C:\jdk1.3,你需要编辑以下文件:C:\jdk1.3\jre\lib\security\java.security为了安装SunJCE,你需要在以上文件中加入:security.provider.n=com.sun.cr......

阅读全文(3139) | 评论:0

(转)使用MessageFormat控制输出(2008-07-19 20:20:00)

摘要:摘自http://www.chinaitpower.com/A200507/2005-07-24/165741.html 本文是为ZDNet翻译的系列文章之一,原文已经发表在ZDNet网站Printf 是很多C语言程序员喜欢的工具,当他们转而使用Java时他们非常的失望。Java有一个替代的方法但是那个方法和C语言的printf()  函数的原理不一样。   幸运的是,早期的Java库的开发者认识到创建一个更合适Java的工具而不是一个printf 函数。   java.text.MessageFormat 允许开发者输出文本中的变量的格式。它是一个强大的类,就像下面的例子展示的那样: String message = "Once upon a time ({1,date}, around about {1,time,short}), there "        + "was a humble developer named Geppetto who slaved for "        + "{0,number,integer} days with {2,number,percent} complete user "        + "requirements. ";Object[] variables = new Object[] { new Integer(4),        &nbs......

阅读全文(3000) | 评论:0

(转)String.getBytes()方法中的中文编码问题(2008-07-13 04:29:00)

摘要:摘自http://www.chinaitpower.com/A200507/2005-07-24/165753.html String.getBytes()的问题String的getBytes()方法是得到一个字串的字节数组,这是众所周知的。但特别要注意的是,本方法将返回该操作系统默认的编码格式的字节数组。如果你在使用这个方法时不考虑到这一点,你会发现在一个平台上运行良好的系统,放到另外一台机器后会产生意想不到的问题。比如下面的程序, class TestCharset  {     public static void main(String[] args)      {         new TestCharset().execute();     }     private void execute() {         String s = "Hello!你好!";                  byte[] bytes = s.getBytes();         System.out.println("bytes lenght is:" + bytes.length);     } } 在一个中文WindowsXP系统下,运行时,结果为:bytes leng......

阅读全文(3426) | 评论:0

(转)Java中浮点数的输出形式及可能引起的问题(2008-07-13 04:23:00)

摘要:摘自http://www.chinaitpower.com/A200507/2005-07-24/165759.html 近来在项目中使用到了一个数据库SQL语句,这个SQL语句是动态生成的,类似下面的方式:     Double quantity = ...;     String sql = "INSERT INTO " + tableName + " (id, name, quantity) VALUES("  + id + ",'" + name + "'," + quantity + ")";     系统正常运行1年多了,突然近段时间系统出错。由于生产环境缺乏充分的调试信息,所以,调试非常困难。经过艰苦的追踪和调试输出,发现问题出现在Double型的quantity的字符串表示上。因为近期系统中quantity遇到了一个比较大的值(大于了10的7次方),而Double型的quantity这儿解析为了类似“1.153E7”的科学计数法形式,虽然大部分的SQL兼容的驱动器基本都认识这种科学计数法形式的数字表示形式,但还是有一些不支持(是否SQL规范中有规定我不清楚,欢迎大家求证)。对于一些不支持这种数字表示形式的驱动器,问题就出来了,它会把它当成一个非法的数字从而报错。在Java中浮点数包括基本型float、double,以及对象包装类型的Float和Double,对于这些浮点数的输出,不管是显式地还是隐式地调用toString()得到它的表示字串,输出格式都是按照如下规则进行的:     如果绝对值大于0.001、小于10000000,那么就以常规的小数形式表示。     如果在上述范围之外,则使用科学计数法表示。即类似于......

阅读全文(3113) | 评论:0