??xml version="1.0" encoding="utf-8" standalone="yes"?>久久亚洲欧美国产精品,亚洲电影免费观看,亚洲视频免费在线播放http://www.tkk7.com/cx361/黑黑博客zh-cnTue, 13 May 2025 08:14:27 GMTTue, 13 May 2025 08:14:27 GMT60Java~程中“ؓ了性能”要做的几点 http://www.tkk7.com/cx361/archive/2012/04/05/373377.html脉凌|络脉凌|络Thu, 05 Apr 2012 08:07:00 GMThttp://www.tkk7.com/cx361/archive/2012/04/05/373377.htmlhttp://www.tkk7.com/cx361/comments/373377.htmlhttp://www.tkk7.com/cx361/archive/2012/04/05/373377.html#Feedback0http://www.tkk7.com/cx361/comments/commentRss/373377.htmlhttp://www.tkk7.com/cx361/services/trackbacks/373377.html最q的机器内存又爆满了Q除了新增机器内存外Q还应该好好review一下我们的代码Q有很多代码~写q于随意化,q些不好的习惯或对程序语a的不了解是应该好好打压打压了?/span>
   
    下面是参考网l资源ȝ的一些在Java~程中尽可能要做到的一些地斏V?/span>
   
    1. 量在合适的场合使用单例
   
    使用单例可以减轻加蝲的负担,~短加蝲的时_提高加蝲的效率,但ƈ不是所有地斚w适用于单例,单来_单例主要适用于以下三个方面:
   
    W一Q控制资源的使用Q通过U程同步来控制资源的q发讉KQ?/span>
   
    W二Q控制实例的产生Q以辑ֈ节约资源的目的;
   
    W三Q控制数据共享,在不建立直接兌的条件下Q让多个不相关的q程或线E之间实现通信?/span>
   
    2. 量避免随意使用静态变?/span>
   
    要知道,当某个对象被定义为stataic变量所引用Q那么gc通常是不会回收这个对象所占有的内存,?/span>
   
    public class A{  static B b = new BQ)Q?nbsp; } 此时静态变量b的生命周期与Acd步,如果AcM会卸载,那么b对象会常d存,直到E序l止?/span>
   
    3. 量避免q多q常的创?/span>Java对象
   
    量避免在经常调用的ҎQ@环中new对象Q由于系l不仅要p旉来创建对象,而且q要花时间对q些对象q行垃圾回收和处理,在我们可以控制的范围内,最大限度的重用对象Q最好能用基本的数据cd或数l来替代对象?/span>
   
    4. 量使用final修饰W?/span>
   
    带有final修饰W的cL不可z的。在Java核心API中,有许多应用final的例子,例如java.lang.String.为StringcL定final防止了用者覆盖lengthQ)Ҏ。另外,如果一个类是final的,则该cL有方法都是final的。Java~译器会LZ内联QinlineQ所有的finalҎQ这和具体的~译器实现有养I。此举能够性能q_提高50%.
   
    5. 量使用局部变?/span>
   
    调用Ҏ时传递的参数以及在调用中创徏的时变量都保存在栈QStackQ中Q速度较快。其他变量,如静态变量、实例变量等Q都在堆QHeapQ中创徏Q速度较慢?/span>
   
    6. 量处理好包装类型和基本cd两者的使用场所
   
    虽然包装cd和基本类型在使用q程中是可以怺转换Q但它们两者所产生的内存区域是完全不同的,基本cd数据产生和处理都在栈中处理,包装cd是对象,是在堆中产生实例?/span>
   
    在集合类对象Q有对象斚w需要的处理适用包装cdQ其他的处理提倡用基本类型?/span>
   
    7. 慎用synchronized,量减小synchronize的方?/span>
   
    都知道,实现同步是要很大的系l开销作ؓ代h的,甚至可能造成死锁Q所以尽量避免无谓的同步控制。synchronizeҎ被调用时Q直接会把当前对象锁 了,在方法执行完之前其他U程无法调用当前对象的其他方法。所以synchronize的方法尽量小Qƈ且应量使用Ҏ同步代替代码块同步?/span>
   
    8. 量使用StringBuilder和StringBufferq行字符串连?/span>
   
    q个׃多讲了?/span>
   
    9. 量不要使用finalizeҎ
   
    实际上,资源清理放在finalizeҎ中完成是非常不好的选择Q由于GC的工作量很大Q尤其是回收Young代内存时Q大都会引v应用E序暂停Q所以再选择使用finalizeҎq行资源清理Q会DGC负担更大Q程序运行效率更差?/span>
   
    10. 量使用基本数据cd代替对象
   
    String str = "hello"; 上面q种方式会创Z?hello"字符Ԍ而且JVM的字W缓存池q会~存q个字符Ԍ
   
    String str = new StringQ?hello"Q; 此时E序除创建字W串外,str所引用的String对象底层q包含一个char[]数组Q这个char[]数组依次存放了h,e,l,l,o
   
    11. 单线E应量使用HashMap、ArrayList
   
    HashTable、Vector{用了同步机制Q降低了性能?/span>
   
    12. 量合理的创建HashMap
   
    当你要创Z个比较大的hashMapӞ充分利用另一个构造函?/span>
   
    public HashMapQint initialCapacity, float loadFactorQ?避免HashMap多次q行了hash重构Q扩Ҏ一件很耗费性能的事Q在默认中initialCapacity只有16,而loadFactor?0.75,需要多大的定wQ你最好能准确的估计你所需要的最佛_,同样的Hashtable,Vectors也是一L道理?/span>
13. 量减少对变量的重复计算
   
    ?/span>
   
    forQint i=0;i<list.sizeQ)Qi++Q?应该改ؓ
   
    forQint i=0,len=list.sizeQ)Qi<len;i++Q?q且在@环中应该避免使用复杂的表辑ּQ在循环中,循环条g会被反复计算Q如果不使用复杂表达式,而循环条gg变的话,E序会q行的更快?/span>
   
    14. 量避免不必要的创徏
   
    ?/span>
   
    A a = new AQ)Q?nbsp; ifQi==1Q{list.addQaQ;} 应该改ؓ
   
    ifQi==1Q{  A a = new AQ)Q?nbsp; list.addQaQ;} 15. 量在finally块中释放资源
   
    E序中用到的资源应当被释放Q以避免资源泄漏。这最好在finally块中d。不程序执行的l果如何Qfinally块L会执行的Q以保资源的正关闭?/span>
   
    16. 量使用UM来代?a/b'的操?/span>
   
    "/"是一个代价很高的操作Q用移位的操作会更快和更有效
   
    ?/span>
   
    int num = a / 4;  int num = a / 8; 应该改ؓ
   
    int num = a ?2;  int num = a ?3; 但注意的是用移位应d注释Q因为移位操作不直观Q比较难理解
   
    17.量使用UM来代?a*b'的操?/span>
   
    同样的,对于'*'操作Q用移位的操作会更快和更有效
   
    ?/span>
   
    int num = a * 4;  int num = a * 8; 应该改ؓ
   
    int num = a ?2;  int num = a ?3; 18. 量定StringBuffer的容?/span>
   
    StringBuffer 的构造器会创Z个默认大(通常?6Q的字符数组。在使用中,如果出q个大小Q就会重新分配内存,创徏一个更大的数组Qƈ原先的数组复制q来Q再 丢弃旧的数组。在大多数情况下Q你可以在创?StringBuffer的时候指定大,q样避免了在容量不够的时候自动增长,以提高性能?/span>
   
    如:
   
    StringBuffer buffer = new StringBufferQ?000Q; 19. 量早释放无用对象的引用
   
    大部分时Q方法局部引用变量所引用的对?会随着Ҏl束而变成垃圾,因此Q大部分时候程序无需局部,引用变量昑ּ设ؓnull.
   
    例如Q?/span>
   
    Public void testQ){  Object obj = new ObjectQ)Q?nbsp; ……  Obj=null;  } 上面q个没必要了,随着ҎtestQ)的执行完成,E序中obj引用变量的作用域q束了。但是如果是Ҏ下面Q?/span>
   
    Public void testQ){  Object obj = new ObjectQ)Q?nbsp; ……  Obj=null;  //执行耗时Q耗内存操作;或调用耗时Q耗内存的Ҏ  ……  } q时候就有必要将obj赋gؓnull,可以早的释攑֯Object对象的引用?/span>
   
    20. 量避免使用二维数组
   
    二维数据占用的内存空间比一l数l多得多Q大?0倍以上?/span>
   
    21. 量避免使用split
   
    除非是必ȝQ否则应该避免用split,split׃支持正则表达式,所以效率比较低Q如果是频繁的几十,几百万的调用会耗费大量资源Q如果确实需 要频J的调用split,可以考虑使用apache的StringUtils.splitQstring,charQ,频繁split的可以缓存结果?/span>
   
    22. ArrayList & LinkedList
   
    一 个是U性表Q一个是链表Q一句话Q随机查询尽量用ArrayList,ArrayList优于LinkedList,LinkedListq要Ud?针,d删除的操作LinkedList优于ArrayList,ArrayListq要Ud数据Q不q这是理论性分析,事实未必如此Q重要的是理解好2 者得数据l构Q对症下药?/span>
   
    23. 量使用System.arraycopy Q)代替通过来@环复制数l?/span>
   
    System.arraycopyQ) 要比通过循环来复制数l快的多
   
    24. 量~存l常使用的对?/span>
   
    可能将l常使用的对象进行缓存,可以使用数组Q或HashMap的容器来q行~存Q但q种方式可能Dpȝ占用q多的缓存,性能下降Q推荐可以用一些第三方的开源工P如EhCache,Oscacheq行~存Q他们基本都实现了FIFO/FLU{缓存算法?/span>
   
    25. 量避免非常大的内存分配
   
    有时候问题不是由当时的堆状态造成的,而是因ؓ分配p|造成的。分配的内存块都必须是连l的Q而随着堆越来越满,扑ֈ较大的连l块来困难?/span>
   
    26. 慎用异常
   
    当创Z个异常时Q需要收集一个栈跟踪Qstack trackQ,q个栈跟t用于描q异常是在何处创建的。构些栈跟踪旉要ؓq行时栈做一份快照,正是q一部分开销很大。当需要创Z?Exception ӞJVM 不得不说Q先别动Q我惛_您现在的样子存一份快照,所以暂时停止入栈和出栈操作。栈跟踪不只包含q行时栈中的一两个元素Q而是包含q个栈中的每一个元素?/span>
   
    ?果您创徏一?Exception ,得付出代h。好在捕获异常开销不大Q因此可以?try-catch 核心内容包h。从技术上Ԍ您甚臛_以随意地抛出异常Q而不用花费很大的代h。招致性能损失的ƈ不是 throw 操作--管在没有预先创建异常的情况下就抛出异常是有点不d。真正要׃L是创建异常。幸q的是,好的~程习惯已教会我们,不应该不三七二十一?抛出异常。异常是为异常的情况而设计的Q用时也应该牢记这一原则?/span>

脉凌|络 2012-04-05 16:07 发表评论
]]>
Java~程风格与命名规范整?http://www.tkk7.com/cx361/archive/2012/03/26/Java.html脉凌|络脉凌|络Mon, 26 Mar 2012 04:45:00 GMThttp://www.tkk7.com/cx361/archive/2012/03/26/Java.htmlhttp://www.tkk7.com/cx361/comments/372699.htmlhttp://www.tkk7.com/cx361/archive/2012/03/26/Java.html#Feedback4http://www.tkk7.com/cx361/comments/commentRss/372699.htmlhttp://www.tkk7.com/cx361/services/trackbacks/372699.html基本命名规范

    包命?/span>

    包名按照域名的范围从大到逐步列出Q恰好和Internet上的域名命名规则相反?/span>

    ׃l以“?#8221;q接的标识符构成Q通常W一个标识符为符合网l域名的两个或者三个英文小写字母?/span>

    People  TestPage  XMLExample

    c,接口命名

    cȝ名字必须由大写字母开头而单词中的其他字母均为小写;如果cdU由多个单词l成Q则每个单词的首字母均应为大写例如TestPageQ如果类名称中包含单词羃写,则这个所写词的每个字母均应大写,如:XMLExample,q有一点命名技巧就是由于类是设计用来代表对象的Q所以在命名cL应尽量选择名词?/span>

    People  TestPage  XMLExample

    Ҏ?/span>

    Ҏ的名字的W一个单词应以小写字母作为开_后面的单词则用大写字母开头。可以ؓ动词或动?名词l合?/span>

    讄/获取某个值的MethodQ应该遵循setV/getV规范

    q回长度的MethodQ应该命名ؓlength

    试某个布尔值的MethodQ应该命名ؓisV

    对象{换ؓ某个特定cd的Mehod应该命名为toF

    getDateQ)Q?nbsp; lengthQ)Q?nbsp; isReadyQ)Q?nbsp; toOracleFormatQ)Q?/span>

    变量?/span>

    1.普通变量命名应该采用首字母写Q其他字母首字母大写的方式?/span>

    2.final static变量的名字应该都大写Qƈ且指出完整含义。如果一个常量名U由多个单词l成Q则应该用下划线来分割这些单词如?/span>

    NUM_DAYS_IN_WEEK  MAX_VALU

    3. 如果需要对变量名进行羃写时Q一定要注意整个代码中羃写规则的一致?/span>

    context=ctx  message=msg

    4. 通过在结֤攄一个量词,可创徏更加l一的变?/span>

    FirstQ一l变量中的第一个)  LastQ一l变量中的最后一个)  NextQ一l变量中的下一个变量)  PrevQ一l变量中的上一个)  CurQ一l变量中的当前变量)

    5. 无论什么时候,均提倡应用常量取代数字、固定字W串。也是_E序中除0Q?以外Q尽量不应该出现其他数字?/span>

    6. 索引变量Qi、j、k{只作ؓ型循环的@环烦引变量?/span>

    7. 逻辑变量Q避免用flag来命名状态变量,用is来命名逻辑变量?/span>

    ifQisClosedQ{  dosomeworks;  return;  }

    数组

    L使用以下方式定义数组Q?/span>

    int[] arr = new int[10];

    止使用C语言的是形式Q?/span>

    止  int arr[] = new int[10];

    集合

    数组或者容器推荐命名方式ؓ名词+s的方式,例如Q?/span>

    List<Person> persons = getPersonQ)Q?nbsp; forQPerson person : personsQ{  dosomeworks;  }

    泛型

    应该量明扼要(最好是一个字母)Q以利于与普通的class或interface区分

    Container中的Element应该用E表示QMap里的key用K表示Qvalue用VQType用T表示Q异常用X表示

    如果需要接收多个Typecd的参敎ͼ应该用邻接T的大写字?#8212;—例如S——来依ơ表C,当然也可以用T1, T2q样的方?/span>

    public class HashSet<E> extends AbstractSet<E> {…}   public class HashMap<K, V> extends AbstractMap<K, V> {…}   public class ThreadLocal<T> {…}   public interface Functor<T, X extends Throwable> {       T valQ) throws X;   }

    推荐的命?/span>

    1.当要区别接口和实现类的时候,可以在类的后面加?#8220;Impl”?/span>

    interface Container  class ContainerImpl

    2.ExceptioncL好能?#8220;Exception”做ؓcd名的l尾

    DataNotFoundException  InvalidArgumentException

    3.抽象cL好能?#8220;Abstract”做ؓcd名的开?/span>

    AbstractBeanDefinition  AbstractBeanFactory

    4. TestcL好能?#8220;Test”做ؓcd名的l尾

    ContainerTest

    5.UC~写Q不推荐使用Q?/span>

    cp代表colorPoint   buf代表buffer   off代表offset   len代表length

    除非是在循环中,否则一般不推荐使用单个字母作ؓ变量名,不过也有例外Q即U定俗成的单个字?/span>

    b代表byte  c代表char  d代表double  e代表Exception   f代表float  i, j, k代表整数   l代表long  o代表Object   s代表String   v代表某些cd的特定?/span>

    代码风格

    花括?/span>

    花括L一采用以下格式Q?/span>

    ifQbool experssionQ{  dosomework;  }

    除非花括号中为空Q不然Q何情况下不能省略花括Pq且花括号必L行,例如Q?/span>

    ifQi==0Q{  return;  }  whileQtrueQ?{}

    以下写法止出现Q?/span>

    止  ifQi != 0Q?return;  止  ifQi !=0Q?{return;}

    括号

    括号的前Q后一个字W不需要空|例如Q?/span>

    Person p = new PersonQ?#8220;Jack”Q?17Q;

    I格

    逗号之后紧跟一个空根{?/span>

    Person p = new PersonQ?#8220;Jack”Q?16, “China”Q;

    2. 二元操作W前后跟I格?/span>

    int i = a + b – c * d;

    3. 一元操作符不需要空|for语句分号后有I格?/span>

    forQint i = 0; I < 10; i++Q{  dosomework;  }

    4. 括号前后不需要空?/span>

    c?/span>

    cȝ定义l构按照序为:

    1Q?帔R

    2Q?成员变量

    3Q?构造函?/span>

    4Q?成员函数

    5Q?get和setҎ

    各个部分之间留出一个空行?/span>

    例如Q?/span>

    规范cL板:

    class Person{      private final static int MAX_AGE = 100;       private String firstname = “Jack”Q?nbsp;      public PersonQ){}  public PersonQString firstnameQ{      this.firstname = firstname;  }   public void doExerciseQ){      dosomeworks;      runQ)Q?nbsp; }  private void runQ){      dosomeworks;  }   public getFirstnameQ){      return firstname;  }  public setFirstnameQString firstnameQ{      this.firstname = firstname;  }  }

    2.构造函?/span>

    1Q?参数为空的构造函数出现在最上方

    2Q?有调用关pȝ构造函数相?/span>

    3Q?参数量由少到多从上至下排序

    3.使用成员变量

    在类的方法内引用成员变量了命名冲H以外,不用this。非Ҏ情况在类的方法内都不使用get和setҎ存取成员变量?/span>

    4.Ҏ

    有调用关pȝҎ量攑֜盔R的位|,public和privateҎ可以交叉攄?/span>

    5.get和setҎQ所有需要公开的成员变量都要符合良好的javabean规范Q提供get和setҎQ尽量用IDE工具自动生成?/span>

    Javadoc注释

    在每个程序的最开始部分,一般都?/span>Javadoc注释对程序的M描述以及版权信息Q之后在ȝ序中可以为每个类、接口、方法、字D|?Javadoc注释Q每个注释的开头部分先用一句话概括该类、接口、方法、字D|完成的功能,q句话应单独占据一行以H出其概括作用,在这句话后面可以跟随更加详细的描q段落。在描述性段落之后还可以跟随一些以Javadoc注释标签开头的ҎD落Q例如上面例子中的@auther和@versionQ这些段落将在生成文档中以特定方式显C?/span>



脉凌|络 2012-03-26 12:45 发表评论
]]>
Java QQ目详细设计之:d模块 http://www.tkk7.com/cx361/archive/2012/03/20/372321.html脉凌|络脉凌|络Tue, 20 Mar 2012 14:36:00 GMThttp://www.tkk7.com/cx361/archive/2012/03/20/372321.htmlhttp://www.tkk7.com/cx361/comments/372321.htmlhttp://www.tkk7.com/cx361/archive/2012/03/20/372321.html#Feedback0http://www.tkk7.com/cx361/comments/commentRss/372321.htmlhttp://www.tkk7.com/cx361/services/trackbacks/372321.html客户端方面登录模块:

对在飞Qd信息界面中输入的各项信息q行初步验。若发现错误Q输入数据全部清I,以让用户重新输入一ơ。若未发现错误,转入ȝ面。其中的错误U类有:

1.输入数据不匹?/p>

帐号 数据库没有该帐号

密码 与对应̎L密码不匹?/p>

2 输入数据不能为空

if (账号为空)

{

误入̎号再登陆

}

else if (账号长度于6或对?0)

{

误入正的账号,账号可以位数字或Email地址?/p>

}

else if (密码为空)

{

误入密码后再登?/p>

}

else

{

通知服务?账号为:xxx 密码为:xxx的请求登?/p>

}

服务器方面:

接收数据q存入loginpot?/p>

判断接收的密码和服务器中的密码是否相同,相同则返回登录成功,q发送一pd信息Q见下)Q不相同则返回登录失败,有相同的帐号d的话Q会向第一个客L发送kill指oQ当认W一个客L下线之后Q第二个客户端就可以d?/p>



脉凌|络 2012-03-20 22:36 发表评论
]]>
java学习路线?http://www.tkk7.com/cx361/archive/2012/03/10/371619.html脉凌|络脉凌|络Sat, 10 Mar 2012 05:27:00 GMThttp://www.tkk7.com/cx361/archive/2012/03/10/371619.htmlhttp://www.tkk7.com/cx361/comments/371619.htmlhttp://www.tkk7.com/cx361/archive/2012/03/10/371619.html#Feedback0http://www.tkk7.com/cx361/comments/commentRss/371619.htmlhttp://www.tkk7.com/cx361/services/trackbacks/371619.html
首先要明白Java体系设计到得三个斚wQJ2SE,J2EE,J2MEQKJAVAQ。J2SEQJava 2 Platform Standard EditionQ我们经常说到的JDKQ就主要指的q个Q它是三者的基础Q属于桌面应用开发,q部分如果学得好很容易拓展J2EE和J2ME?J2MEQThe Micro Edition of the Java 2 Platform。主要用于嵌入式JavaQ如手机QPDA{等。J2EEQJava 2 PlatformQEnterprise EditionQ就是所谓的企业UJavaQ适合企业的大型应用开发?

  在学习了J2SE之后Q你可以试着慢慢q渡到J2EEQ当Ӟ学习J2EE需要很多非JAVA技术的支撑Q比如数据库技术,|页~程技术等{,待会我会详细介绍q两斚w的内宏VJ2EE有三个必学的框架Q如果你说你学了J2EEQ但又不会这三个框架的话Q那会让人笑掉大牙,q三个框架分别是 Struts、Spring和HibernateQ虽然这三个框架应用很广Q但不代表这三个框架׃表了J2EEQJ2EEq有很多其他的东西,比如 EJBQ作ZN量Q此重量U不是指重量U选手那个意思,此重量非彼重量U)框架Q虽然这个应用慢慢的再被其他框架所取代Q但EJB3.0的出Cl它带回一些生机,作ؓ一个分布式应用的框Ӟ也是大家要去学习和了解的知识?/p>

  当然Q刚才说到J2EE包含的范围很q,即我把我所了解的所有技术说出来Q也q不能代表J2EEQ这是一个很深很q的学问Q需要大家以后再工作的时候慢慢去发现了。我所了解的还包括Q?/p>

  JDBC:Java数据库连接对象,基础中的基础QHibernate也只是对它的装而已

  JNDI: Java 命名与目录接口,J2EE重要规范之一

  EJBS: 上面已经提到q了

  RMI: 提供q程调用Ҏ的支持,主要用于E序分布式开?/p>

  JMS: Java消息服务Q中间g技?/p>

  JAVA IDL: 提供J2EEq_与CORBA交互能力和互联能力的技?/p>

  JTS: lg事务监视?/p>

  JTA: 事务划分的一个技?/p>

  JAVAMAIL: Java中的邮g技?/p>

  JAF: Java启动框架,没研I过

  Log4jQ一ƾ日志处理的框架应用

  JunitQ单元测试的好帮?/p>

  freemarker、velocityQ两ƾ不错的模板引擎

  与Flash的交互FlexQ目前很多的SNS应用是使用Cq个技?/p>

  Web services:想知道我们论坛天气预报的效果是怎么做的吗?请关注这个技?/p>

  SOA:面向服务架构Q未来技术发展的势之一

  ……

  不过前面介绍到得q些都不是J2EE的基,是属于框架应用别的.要真正把上面说到的知识掌握好,q是的学习J2EE最核心的东?JDBC、JSP?servlet和JavaBean,后面三个也是学习SSH的基(Struts\Spring\Hibernate的简U?.鉴于J2EE的内容太q复?大家最初只学习: JSP, servlet和JavaBeanQ等q个基础掌握好再把SSH学习了,再对其他J2EE技术有个大致的了解可以出L工作了。当Ӟ扑ַ作的前提除了把Java学习好,q会有一些其他的技术也是必要掌握?br />



脉凌|络 2012-03-10 13:27 发表评论
]]>
白学JAVAhttp://www.tkk7.com/cx361/archive/2012/02/26/370789.html脉凌|络脉凌|络Sun, 26 Feb 2012 05:44:00 GMThttp://www.tkk7.com/cx361/archive/2012/02/26/370789.htmlhttp://www.tkk7.com/cx361/comments/370789.htmlhttp://www.tkk7.com/cx361/archive/2012/02/26/370789.html#Feedback4http://www.tkk7.com/cx361/comments/commentRss/370789.htmlhttp://www.tkk7.com/cx361/services/trackbacks/370789.html 

 对于JAVAQ现在的我就是一个小白,跟着视频写着写自q一?#8220;Hello world”的小E序Q就已经犯了六七处错了。。。。。。不q我是小白,犯点错是很正常的?/p>

            接下来我把我犯的错记录下来?/p>

D:\java\day01>javac demo.java
demo.java:1: 需?<标识W?gt;
class
     ^
1 错误


           

         q不Q我下蝲了个editplusQ先新徏了一个JAVA的文本,里面自动生成了一个经典的“Hello World”的代码。我q挺高兴Q准备先q行看看效果Q结果连~译都没有通过。。?

先看看这D代码吧

 class
        {   

          public static void main(String[] args)
                    {       
              System.out.println("Hello World!");
                     }
         }


        看了报错Q再看代码,错误也就一目了然了。原来我q类名都没有赗。。。。。亏我还在DOS里打了demo......

         加上cd后,~译没有报错Q太好了Q至没有语法错误。可是问题又来了。。?/p>

D:\java\day01>java demo


Exception in thread "main" java.lang.NoClassDefFoundError: demo (wrong name: Dem
o)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: demo.  Program will exit.

 

        q行时又出现报错了,而且q是q么幅巨大Q崩溃~~~ 不过仔细一看发现报错里?wrong name: Dem
o)  好吧Q不q这也体CJAVA严格区分大小写,让我对这一点认识加׃?/p>

              

 D:\java\day01>java Demo
Hello World!

   
    看见q两单词是真不容易啊Q小Ȁ?。当Ӟq代码是自动生成的,所心我又自qC本,照着视频里一个字母一个字母地Ԍl果。。。你懂的Q又有报错了。。?/p>

 

D:\java\day01>javac Demo1.java
Demo1.java:5: 需?';'
                System.out.println("hello world")
                                                 ^
1 错误

 

   q个报错q是很明昄Q需?#8220;;”Q不q,h“;”应该怎么用,我还是需要多多观察。可是加上了以后q是报错?/p>

 

D:\java\day01>javac demo1.java
demo1.java:5: 软g?system 不存?br />                system.out.println("hello world");
                      ^
1 错误

 

 仔细对照后才发现Q原来是system的首字没有大写。所有都更正后,q行正常?

         以上我的W一个JAVAE序的编写过E,只ؓ自己高兴。(Z吐槽TX的日志排版真让h蛋疼Q?br />

 



脉凌|络 2012-02-26 13:44 发表评论
]]>
Java删除和拷贝文仉归实现Ҏ http://www.tkk7.com/cx361/archive/2012/02/21/370402.html脉凌|络脉凌|络Tue, 21 Feb 2012 05:29:00 GMThttp://www.tkk7.com/cx361/archive/2012/02/21/370402.htmlhttp://www.tkk7.com/cx361/comments/370402.htmlhttp://www.tkk7.com/cx361/archive/2012/02/21/370402.html#Feedback1http://www.tkk7.com/cx361/comments/commentRss/370402.htmlhttp://www.tkk7.com/cx361/services/trackbacks/370402.htmlJava' target='_blank'>java删除和拷贝文仉归实现Ҏ单点Q?br />
E序自己调用自己

实现文g的删除和拯Q代码如下:

package com.viita;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Dptest {

//删除制定文g夹的所有文件及Ҏ件夹

public void deleteFile(String path) {
// TODO Auto-generated method stub
File f = new File(path);
if(f.isDirectory())
{
File[] file = f.listFiles();
for (File file2 : file) {
this.deleteFile(file2.toString());
file2.delete();
}
}else
{
f.delete();
}
f.delete();
}
//拯整个文g夹的Ҏ

public void copyFiles(String path1, String path2) throws Exception {
// TODO Auto-generated method stub
File file = new File(path1);
if(file.isDirectory())
{
File f = new File(path2);
if(!f.exists()) f.mkdir();
File[] files = file.listFiles();
for (File file2 : files) {
//System.out.println(file2.toString()+"-----"+path2+"/"+file2.getName());
copyFiles(file2.toString(),path2+"/"+file2.getName());
}
}else
{
copy(path1,path2);
}
}

//拯单个文g的方?br />
public void copy(String path1,String path2) throws IOException {
// TODO Auto-generated method stub
DataInputStream in = new DataInputStream(
new BufferedInputStream(
new FileInputStream(path1)));
byte[] date = new byte[in.available()];
in.read(date);
DataOutputStream out = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(path2)));
out.write(date);
in.close();
out.close();
}
public static void main(String[] args) throws Exception {
Dptest dp = new Dptest();
dp.deleteFile("c:/wmpub");
// dp.copyFiles("c:/新徏文g?, "c:/xiao");
}
}



脉凌|络 2012-02-21 13:29 发表评论
]]>
javaU程池分?/title><link>http://www.tkk7.com/cx361/archive/2012/02/17/370207.html</link><dc:creator>脉凌|络</dc:creator><author>脉凌|络</author><pubDate>Fri, 17 Feb 2012 10:51:00 GMT</pubDate><guid>http://www.tkk7.com/cx361/archive/2012/02/17/370207.html</guid><wfw:comment>http://www.tkk7.com/cx361/comments/370207.html</wfw:comment><comments>http://www.tkk7.com/cx361/archive/2012/02/17/370207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/cx361/comments/commentRss/370207.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/cx361/services/trackbacks/370207.html</trackback:ping><description><![CDATA[<p>SyndContentImpl.value= <p><span style="font-family: 宋体; font-size: small">    在Java 5.0之前启动一个Q务是通过调用Threadcȝstart()Ҏ来实现的QQ务的提于交和执行是同时进行的Q如果你惛_d的执行进行调度或是控?同时执行的线E数量就需要额外编写代码来完成?.0里提供了一个新的Q务执行架构你可以轻村֜调度和控制Q务的执行Qƈ且可以徏立一个类似数据库q接 池的U程池来执行d。这个架构主要有三个接口和其相应的具体类l成。这三个接口是Executor, ExecutorService、ScheduledExecutorServiceQ让我们先用一个图来显C它们的关系Q?/span></p> <p><span style="font-family: 宋体; font-size: small">   </span></p> <p> </p> <p><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 18px; font-size: 12px" class="Apple-style-span"><span style="font-family: 宋体"><img border="0" alt="" src="http://www.tkk7.com/images/blogjava_net/cx361/2012021612175254.jpg" /><br />囄左侧是接口,囄右侧是这些接口的具体cR注意Executor是没有直接具体实现的?/span></span></span></p> <p><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 18px; font-size: 12px" class="Apple-style-span"><span style="font-family: 宋体"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 18px; font-size: 12px" class="Apple-style-span"><span style="font-size: small"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 18px; font-size: 12px" class="Apple-style-span"><span style="font-family: 宋体"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 18px; font-size: 12px" class="Apple-style-span"> </span></span></span></span></span></span></span></span></span></span></span></span></p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small"><strong style="font-weight: bold"><em style="font-style: italic">Executor</em></strong><strong style="font-weight: bold"><em style="font-style: italic">接口Q?/em></strong>是用来执行Runnabled的,它只定义一个方法:</span></p> <p> </p> <ul style="padding-bottom: 0px; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; padding-top: 0px" sizcache0050013322146665096="4" sizset="9"><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">execute(<em style="font-style: italic">Runnable command</em>)Q执行Ruannablecd的Q?</span></li></ul> <p> </p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small"><strong style="font-weight: bold"><em style="font-style: italic">ExecutorService</em></strong><strong style="font-weight: bold"><em style="font-style: italic">接口Q?/em></strong>ExecutorServicel承了Executor的方法,q提供了执行Callabled和中止Q务执行的服务Q其定义的方法主要有Q?/span></p> <p> </p> <ul style="padding-bottom: 0px; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; padding-top: 0px" sizcache0050013322146665096="4" sizset="10"><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">submit(<em style="font-style: italic">task</em>)Q可用来提交Callable或RunnabledQƈq回代表此Q务的Future对象 </span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">invokeAll(<em style="font-style: italic">collection of tasks</em>)Q批处理d集合Qƈq回一个代表这些Q务的Future对象集合 </span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">shutdown()Q在完成已提交的d后关闭服务,不再接受CQ?</span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">shutdownNow()Q停止所有正在执行的dq关闭服务?</span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">isTerminated()Q测试是否所有Q务都执行完毕了?</span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">isShutdown()Q测试是否该ExecutorService已被关闭 </span></li></ul> <p> </p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small"><strong style="font-weight: bold"><em style="font-style: italic">ScheduledExecutorService</em></strong><strong style="font-weight: bold"><em style="font-style: italic">接口</em></strong>在ExecutorService的基上,ScheduledExecutorService提供了按旉安排执行d的功能,它提供的Ҏ主要有:</span></p> <p> </p> <ul style="padding-bottom: 0px; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; padding-top: 0px" sizcache0050013322146665096="4" sizset="16"><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">schedule(<em style="font-style: italic">task, initDelay</em>): 安排所提交的Callable或Runnabled在initDelay指定的时间后执行?</span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">scheduleAtFixedRate()Q安排所提交的Runnabled按指定的间隔重复执行 </span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">scheduleWithFixedDelay()Q安排所提交的Runnabled在每ơ执行完后,{待delay所指定的时间后重复执行?</span></li></ul> <p> </p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"> </p> <p> </p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small"><strong style="font-weight: bold"><em style="font-style: italic">重要的Executors</em></strong><strong style="font-weight: bold"><em style="font-style: italic">c?/em></strong></span></p> <p> </p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">虽然以上提到的接口有其实现的具体c,但ؓ了方便Java 5.0使用Executors的工L来得到Executor接口的具体对象,需要注意的是Executors是一个类Q不是Executor的复?形式。Executors提供了以下一些static的方法:</span></p> <p> </p> <ul style="padding-bottom: 0px; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; padding-top: 0px" sizcache0050013322146665096="4" sizset="19"><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">callable(<em style="font-style: italic">Runnable task</em>): Runnable的Q务{化成Callable的Q?</span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">newSingleThreadExecutor: 产生一个ExecutorService对象Q这个对象只有一个线E可用来执行dQ若d多于一个,d按先后序执行?</span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">newCachedThreadPool(): 产生一个ExecutorService对象Q这个对象带有一个线E池Q线E池的大会Ҏ需要调_U程执行完Q务后q回U程池,供执行下一ơQ务用?</span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">newFixedThreadPool(<em style="font-style: italic">int poolSize</em>)Q生一个ExecutorService对象Q这个对象带有一个大ؓpoolSize的线E池Q若d数量大于poolSizeQQ务会被放在一个queue里顺序执行?</span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">newSingleThreadScheduledExecutorQ生一个ScheduledExecutorService对象Q这个对象的U程池大ؓ1Q若d多于一个,d按先后序执行?</span></li><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">newScheduledThreadPool(<em style="font-style: italic">int poolSize</em>): 产生一个ScheduledExecutorService对象Q这个对象的U程池大ؓpoolSizeQ若d数量大于poolSizeQQ务会在一个queue里等待执?</span></li></ul> <p> </p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"> </p> <p> </p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">举例说明Q?/span></p> <p> </p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: x-small"><span style="font-size: small">应用Executors来徏立Thread pool</span></span></p> <p> </p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"> </p> <p> </p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><small><span style="font-size: x-small"><span style="font-size: small">有时候您需要徏立一堆Thread来执行一些小dQ然而频J的建立Thread有时会是个开销Q因为Thread的徏立必M作业pȝ互动Q如果能建立一个Thread pool来管理这些小的Threadq加以重复用,对于pȝ效能会是个改善的方式?/p> <p>您可以用Executors来徏立Thread poolQExecutors有几个staticҎQ列出如下:</span></span></small></p> <p> </p> <table style="text-align: left; width: 634px; height: 82px" border="1" cellspacing="2" cellpadding="2"> <tbody> <tr> <td style="background-color: #cccccc; width: 236px; font-size: 1em"><small><span style="font-size: x-small">Ҏ</span></small></td> <td style="background-color: #cccccc; width: 378px; font-size: 1em"><small><span style="font-size: x-small">说明</span></small></td></tr> <tr> <td style="width: 236px; font-size: 1em"><small><tt><span style="font-size: x-small"><span style="font-family: 新宋?>newCachedThreadPool</span></span></tt></small></td> <td style="width: 378px; font-size: 1em"><small><span style="font-size: x-small">建立可以快取的ThreadQ每个Thread预设可idle 60U?/span></small></td></tr> <tr> <td style="width: 236px; font-size: 1em"> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" class="docText"><small><span style="font-size: x-small"><tt><span style="font-family: 新宋?>newFixedThreadPool</span></tt></span></small></p></td> <td style="width: 378px; font-size: 1em"><small><span style="font-size: x-small">包括固定数量的Thread</span></small></td></tr> <tr> <td style="width: 236px; font-size: 1em"> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" class="docText"><small><span style="font-size: x-small"><tt><span style="font-family: 新宋?>newSingleThreadExecutor</span></tt></span></small></p></td> <td style="width: 378px; font-size: 1em"><small><span style="font-size: x-small">只有一个ThreadQ@序的执行指定l它的每个Q?/span></small></td></tr> <tr> <td style="width: 236px; font-size: 1em"><small><tt><span style="font-size: x-small"><span style="font-family: 新宋?>newScheduledThreadPool</span></span></tt></small></td> <td style="width: 378px; font-size: 1em"><small><span style="font-size: x-small">可排E的Thread</span></small></td></tr> <tr> <td style="width: 236px; font-size: 1em"><small><tt><span style="font-size: x-small"><span style="font-family: 新宋?>newSingleThreadScheduledExecutor</span></span></tt></small></td> <td style="width: 378px; font-size: 1em"><small><span style="font-size: x-small">单一可排E的Thread</span></small></td></tr></tbody></table> <p> </p> <p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: x-small"><span style="font-size: small"><span>举个单的实例Q下面的E式使用newFixedThreadPoolҎ建立Thread poolQ当中包括五个可以重复用的ThreadQ您可以指定Runnable物gl它Q程式中会生十个Runnable物gQ由于Thread pool中只有五个可用的ThreadQ所以后来徏立的五个Runnable必须{待有空闲的Thread才会被执行:</span><br /></span></span></p> <p> </p> <ul style="padding-bottom: 0px; margin: 0px 0px 1.5em; padding-left: 0px; padding-right: 0px; padding-top: 0px" sizcache0050013322146665096="4" sizset="25"><li style="padding-bottom: 0px; margin: 0px 0px 0.25em 30px; padding-left: 0px; padding-right: 0px; padding-top: 0px"><span style="font-size: small">ExecutorDemo.java </span></li></ul> <p> </p><pre><span style="font-size: small">package onlyfun.caterpillar; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ExecutorDemo { public static void main(String[] args) { <span style="font-weight: bold">ExecutorService service = Executors.newFixedThreadPool(5);</span> for(int i = 0; i < 10; i++) { final int count = i; <span style="font-weight: bold">service.submit</span> (new Runnable() { public void run() { System.out.println(count); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }); } <span style="font-weight: bold">service.shutdown(); // 最后记得关闭Thread pool</span> } }</span></pre> <p> </p><pre><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 15px; font-size: x-small" class="Apple-style-span"><span style="font-size: small">submit()Ҏ也接受实作Callable介面的物Ӟ最后传回Future物gQ可以取得Callable执行q后的传回结果? 如果惛_用Executorsq行排程Q例如排定某个工?0U后执行Q?/span></span></span></pre> <p> </p><pre><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 15px; font-size: x-small" class="Apple-style-span"><span style="font-size: small"> ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor( );        scheduler.schedule(new Runnable( ) {                               public void run() {                                   // 排程工作                               }                           },                           30, TimeUnit.SECONDS);</span></span></span></pre> <p> </p><pre><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 15px; font-size: x-small" class="Apple-style-span"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 15px; font-size: x-small" class="Apple-style-span"><span style="font-size: small">或排定某个工?U后执行Q之后每30U执行一ơ:</span></span></span></span></span></pre> <p> </p><pre><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 15px; font-size: x-small" class="Apple-style-span"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 15px; font-size: x-small" class="Apple-style-span"><span style="font-size: small"> ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor( );        final ScheduledFuture future = scheduler.scheduleAtFixedRate(new Runnable( ) {                               public void run() {                                   // 排程工作                                   System.out.println("t");                               }                           },                           0, 5, TimeUnit.SECONDS);               // 排定 60 U后取消future        scheduler.schedule(new Runnable( ) {            public void run( ) {              future.cancel(false);            }          }, 60, TimeUnit.SECONDS);<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 15px; font-size: x-small" class="Apple-style-span">如上所C,惌取消排程dQ可以呼叫ScheduledFuture的cancel()Ҏ?/span></span></span></span></span></span></span></pre> <p> </p><img src ="http://www.tkk7.com/cx361/aggbug/370207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/cx361/" target="_blank">脉凌|络</a> 2012-02-17 18:51 <a href="http://www.tkk7.com/cx361/archive/2012/02/17/370207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Javascript来生成ftp脚本 http://www.tkk7.com/cx361/archive/2012/02/16/370137.html脉凌|络脉凌|络Thu, 16 Feb 2012 10:23:00 GMThttp://www.tkk7.com/cx361/archive/2012/02/16/370137.htmlhttp://www.tkk7.com/cx361/comments/370137.htmlhttp://www.tkk7.com/cx361/archive/2012/02/16/370137.html#Feedback1http://www.tkk7.com/cx361/comments/commentRss/370137.htmlhttp://www.tkk7.com/cx361/services/trackbacks/370137.html    当然不是直接做ftpQ而是产生一个ftp的脚本,供ftp命o使用?/p>

    E序也很单,是遍历一下本地目录,然后产生一堆ftp命o?/p>

    Z避免以后再做此类重复力_Q我记在q里?/p>

    ----------------------------------------------------------

    function matchDemoQstrFolderNameQ?/p>

    {

    var s;

    var re = /200\d{5}/ig;

    s = strFolderName.matchQreQ;

    returnQsQ;

    }

    function initQ)

    {

    strScript ="open 192.168.1.32 \n";

    strScript+="user sybase 111111 \n";

    strScript+="bin\n";

    strScript+="prompt\n";

    strScript+="cd /hisdata/olddata \n";

    dicWhiteList = new ActiveXObjectQ?Scripting.Dictionary"Q;

    dicWhiteList.add Q?20051205_pihou", ""Q;

    dicWhiteList.add Q?20051206_pihou", ""Q;

    dicWhiteList.add Q?20060701_pihou", ""Q;

    }

    function EnumSubFolderQoSubFolderQ?/p>

    {

    var eFolders=new EnumeratorQoSubFolder.SubFoldersQ;

    var s="";

    ifQeFolders.atEndQ)Q?/p>

    {

    return s;

    }

    else

    {

    for Q; !eFolders.atEndQ)Q?eFolders.moveNextQ)Q?/p>

    {

    s+="lcd \"";

    s+=eFolders.itemQ)Q?/p>

    s+="\"\n";

    s+="mput *.*\n";

    }

    return s;

    }

    }

    function checkListQstrToBeCheckedQ?/p>

    {

    return !dicWhiteList.ExistsQstrToBeCheckedQ;

    }

    var strScript,dicWhitList;

    var sFolderPath="e:\\";

    var oFs=new ActiveXObjectQ?Scripting.FileSystemObject"Q;

    initQ)Q?/p>

    if QoFs.FolderExistsQsFolderPathQ)

    {

    //WScript.EchoQ?valid folder"Q;

    var oFolders=oFs.GetFolderQsFolderPathQ;

    var eFolders=new EnumeratorQoFolders.SubFoldersQ;

    ifQeFolders.atEndQ)Q?/p>

    {

    strScript += "mkdir \"";

    strScript += oFs.GetBaseNameQsFolderPathQ;

    strScript += "\"\n";

    }

    else

    {

    for Q; !eFolders.atEndQ)Q?eFolders.moveNextQ)Q?/p>

    {

    strTargetFolderName=matchDemoQeFolders.itemQ)+""Q;

    ifQstrTargetFolderName==null || checkListQoFs.GetBaseNameQeFolders.itemQ)Q)Q?/p>

    continue;

    strTmpFolderName="\""+oFs.GetBaseNameQeFolders.itemQ)Q?"\"";

    strScript += "mkdir "

    strScript += strTargetFolderName;

    strScript += "\n";

    strScript += "cd ";

    strScript += strTargetFolderName;

    strScript += "\n";

    strScript += EnumSubFolderQeFolders.itemQ)Q;

    strScript += "lcd "

    strScript += eFolders.itemQ)Q?/p>

    strScript += "\n";

    strScript += "mput *.*\n";

    strScript += "cd  \nlcd \n";

    }

    }

    strScript+="bye\n";

    WScript.EchoQstrScriptQ;

    }

    else

    {

    WScript.EchoQ?Bad Folder Name"Q;

    }



脉凌|络 2012-02-16 18:23 发表评论
]]>
Java中计两个日期相差几?/title><link>http://www.tkk7.com/cx361/archive/2012/02/14/369984.html</link><dc:creator>脉凌|络</dc:creator><author>脉凌|络</author><pubDate>Tue, 14 Feb 2012 13:31:00 GMT</pubDate><guid>http://www.tkk7.com/cx361/archive/2012/02/14/369984.html</guid><wfw:comment>http://www.tkk7.com/cx361/comments/369984.html</wfw:comment><comments>http://www.tkk7.com/cx361/archive/2012/02/14/369984.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/cx361/comments/commentRss/369984.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/cx361/services/trackbacks/369984.html</trackback:ping><description><![CDATA[<p>public class Test {<br />public void dateDiff(String startTime, String endTime, String format) {<br />//按照传入的格式生成一个simpledateformate对象<br />SimpleDateFormat sd = new SimpleDateFormat(format);<br />long nd = 1000*24*60*60;//一天的毫秒?br />long nh = 1000*60*60;//一时的毫U数<br />long nm = 1000*60;//一分钟的毫U数<br />long ns = 1000;//一U钟的毫U数<br />long diff;<br />try {<br />//获得两个旉的毫U时间差?br />diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime();<br />long day = diff/nd;//计算差多天<br />long hour = diff%nd/nh;//计算差多小?br />long min = diff%nd%nh/nm;//计算差多分?br />long sec = diff%nd%nh%nm/ns;//计算差多秒<br />//输出l果<br />System.out.println("旉相差Q?+day+"?+hour+"时"+min+"分钟"+sec+"U?);<br />} catch (ParseException e) {<br />e.printStackTrace();<br />}<br />}</p> <p>public static void main(String[] args) {<br />new Test().dateDiff(new SimpleDateFormat("yyyy-MM-dd").format(new Date()), "2011-4-28", "yyyy-MM-dd");<br />}<br />}</p><img src ="http://www.tkk7.com/cx361/aggbug/369984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/cx361/" target="_blank">脉凌|络</a> 2012-02-14 21:31 <a href="http://www.tkk7.com/cx361/archive/2012/02/14/369984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java代码汉字{换成拼音http://www.tkk7.com/cx361/archive/2012/02/11/369795.html脉凌|络脉凌|络Sat, 11 Feb 2012 08:56:00 GMThttp://www.tkk7.com/cx361/archive/2012/02/11/369795.htmlhttp://www.tkk7.com/cx361/comments/369795.htmlhttp://www.tkk7.com/cx361/archive/2012/02/11/369795.html#Feedback1http://www.tkk7.com/cx361/comments/commentRss/369795.htmlhttp://www.tkk7.com/cx361/services/trackbacks/369795.htmlGUI代码部分Q?br />/**
* @(#)CnToSpellGUI.java
* kindani
* 2004-10-25??
* */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
*


*

JDK版本

1.4

* @author KIN
* @version 1.0
* @see
* @since 1.0
*/
public class CnToSpell2GUI extends JFrame {

private CnToSpell2GUI c = null;

public CnToSpell2GUI () {
super("Cn to Spell");
setSize(800,100);
getContentPane().setLayout(new FlowLayout());
// component layout
JTextArea from = new JTextArea(5,20);
JTextArea to = new JTextArea(5,20);
JButton b = new JButton("cn to pinyin");
getContentPane().add(new JLabel("From:"));
getContentPane().add(from);
getContentPane().add(b);
getContentPane().add(new JLabel("To:"));
getContentPane().add(to);
// action handle
b.addActionListener(new Cn2PinyinActionListener(from,to));
setVisible(true);
// set this for pack
c = this;
}

/**button action listener to convert text to pinyin from one textbox to another textbox*/
class Cn2PinyinActionListener implements ActionListener{

private JTextArea from = null;
private JTextArea to = null;
public Cn2PinyinActionListener(JTextArea from, JTextArea to) {
this.from = from;
this.to = to;
}
public void actionPerformed(ActionEvent e) {
if (from.getText().length() == 0) {
JOptionPane.showMessageDialog(from,"From text is empty!","Warning",JOptionPane.WARNING_MESSAGE);
}
String text = from.getText();
to.setText(CnToSpell.getFullSpell(text));
c.pack();
}
}

public static void main(String [] args) {
CnToSpell2GUI g = new CnToSpell2GUI();
}
}

 

------------------------------------------------------------------------
/**
* @(#)CnToSpell.java
* 版权声明 Easydozer 版权所?q者必I?
*
* 修订记录:
* 1)更改者:Easydozer
* 时 _2004-10-20 
* 描 qͼ创徏
*/
package com.easydozer.commons.util;

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;

/**
*
汉字转化为全?br />*

JDK版本:

1.4

* @author 谢计?br />* @version 1.0
* @see
* @since 1.0
*/
public class CnToSpell
{
private static LinkedHashMap spellMap = null;

static
{
if(spellMap == null){
spellMap = new LinkedHashMap(400);
}
initialize();
System.out.println("Chinese transfer Spell Done.");
}

private CnToSpell()
{
}

private static void spellPut(String spell,int ascii)
{
spellMap.put(spell,new Integer(ascii));
}

private static void initialize()
{
spellPut("a", -20319);
spellPut("ai", -20317);
spellPut("an", -20304);
spellPut("ang", -20295);
spellPut("ao", -20292);
spellPut("ba", -20283);
spellPut("bai", -20265);
spellPut("ban", -20257);
spellPut("bang", -20242);
spellPut("bao", -20230);
spellPut("bei", -20051);
spellPut("ben", -20036);
spellPut("beng", -20032);
spellPut("bi", -20026);
spellPut("bian", -20002);
spellPut("biao", -19990);
spellPut("bie", -19986);
spellPut("bin", -19982);
spellPut("bing", -19976);
spellPut("bo", -19805);
spellPut("bu", -19784);
spellPut("ca", -19775);
spellPut("cai", -19774);
spellPut("can", -19763);
spellPut("cang", -19756);
spellPut("cao", -19751);
spellPut("ce", -19746);
spellPut("ceng", -19741);
spellPut("cha", -19739);
spellPut("chai", -19728);
spellPut("chan", -19725);
spellPut("chang", -19715);
spellPut("chao", -19540);
spellPut("che", -19531);
spellPut("chen", -19525);
spellPut("cheng", -19515);
spellPut("chi", -19500);
spellPut("chong", -19484);
spellPut("chou", -19479);
spellPut("chu", -19467);
spellPut("chuai", -19289);
spellPut("chuan", -19288);
spellPut("chuang", -19281);
spellPut("chui", -19275);
spellPut("chun", -19270);
spellPut("chuo", -19263);
spellPut("ci", -19261);
spellPut("cong", -19249);
spellPut("cou", -19243);
spellPut("cu", -19242);
spellPut("cuan", -19238);
spellPut("cui", -19235);
spellPut("cun", -19227);
spellPut("cuo", -19224);
spellPut("da", -19218);
spellPut("dai", -19212);
spellPut("dan", -19038);
spellPut("dang", -19023);
spellPut("dao", -19018);
spellPut("de", -19006);
spellPut("deng", -19003);
spellPut("di", -18996);
spellPut("dian", -18977);
spellPut("diao", -18961);
spellPut("die", -18952);
spellPut("ding", -18783);
spellPut("diu", -18774);
spellPut("dong", -18773);
spellPut("dou", -18763);
spellPut("du", -18756);
spellPut("duan", -18741);
spellPut("dui", -18735);
spellPut("dun", -18731);
spellPut("duo", -18722);
spellPut("e", -18710);
spellPut("en", -18697);
spellPut("er", -18696);
spellPut("fa", -18526);
spellPut("fan", -18518);
spellPut("fang", -18501);
spellPut("fei", -18490);
spellPut("fen", -18478);
spellPut("feng", -18463);
spellPut("fo", -18448);
spellPut("fou", -18447);
spellPut("fu", -18446);
spellPut("ga", -18239);
spellPut("gai", -18237);
spellPut("gan", -18231);
spellPut("gang", -18220);
spellPut("gao", -18211);
spellPut("ge", -18201);
spellPut("gei", -18184);
spellPut("gen", -18183);
spellPut("geng", -18181);
spellPut("gong", -18012);
spellPut("gou", -17997);
spellPut("gu", -17988);
spellPut("gua", -17970);
spellPut("guai", -17964);
spellPut("guan", -17961);
spellPut("guang", -17950);
spellPut("gui", -17947);
spellPut("gun", -17931);
spellPut("guo", -17928);
spellPut("ha", -17922);
spellPut("hai", -17759);
spellPut("han", -17752);
spellPut("hang", -17733);
spellPut("hao", -17730);
spellPut("he", -17721);
spellPut("hei", -17703);
spellPut("hen", -17701);
spellPut("heng", -17697);
spellPut("hong", -17692);
spellPut("hou", -17683);
spellPut("hu", -17676);
spellPut("hua", -17496);
spellPut("huai", -17487);
spellPut("huan", -17482);
spellPut("huang", -17468);
spellPut("hui", -17454);
spellPut("hun", -17433);
spellPut("huo", -17427);
spellPut("ji", -17417);
spellPut("jia", -17202);
spellPut("jian", -17185);
spellPut("jiang", -16983);
spellPut("jiao", -16970);
spellPut("jie", -16942);
spellPut("jin", -16915);
spellPut("jing", -16733);
spellPut("jiong", -16708);
spellPut("jiu", -16706);
spellPut("ju", -16689);
spellPut("juan", -16664);
spellPut("jue", -16657);
spellPut("jun", -16647);
spellPut("ka", -16474);
spellPut("kai", -16470);
spellPut("kan", -16465);
spellPut("kang", -16459);
spellPut("kao", -16452);
spellPut("ke", -16448);
spellPut("ken", -16433);
spellPut("keng", -16429);
spellPut("kong", -16427);
spellPut("kou", -16423);
spellPut("ku", -16419);
spellPut("kua", -16412);
spellPut("kuai", -16407);
spellPut("kuan", -16403);
spellPut("kuang", -16401);
spellPut("kui", -16393);
spellPut("kun", -16220);
spellPut("kuo", -16216);
spellPut("la", -16212);
spellPut("lai", -16205);
spellPut("lan", -16202);
spellPut("lang", -16187);
spellPut("lao", -16180);
spellPut("le", -16171);
spellPut("lei", -16169);
spellPut("leng", -16158);
spellPut("li", -16155);
spellPut("lia", -15959);
spellPut("lian", -15958);
spellPut("liang", -15944);
spellPut("liao", -15933);
spellPut("lie", -15920);
spellPut("lin", -15915);
spellPut("ling", -15903);
spellPut("liu", -15889);
spellPut("long", -15878);
spellPut("lou", -15707);
spellPut("lu", -15701);
spellPut("lv", -15681);
spellPut("luan", -15667);
spellPut("lue", -15661);
spellPut("lun", -15659);
spellPut("luo", -15652);
spellPut("ma", -15640);
spellPut("mai", -15631);
spellPut("man", -15625);
spellPut("mang", -15454);
spellPut("mao", -15448);
spellPut("me", -15436);
spellPut("mei", -15435);
spellPut("men", -15419);
spellPut("meng", -15416);
spellPut("mi", -15408);
spellPut("mian", -15394);
spellPut("miao", -15385);
spellPut("mie", -15377);
spellPut("min", -15375);
spellPut("ming", -15369);
spellPut("miu", -15363);
spellPut("mo", -15362);
spellPut("mou", -15183);
spellPut("mu", -15180);
spellPut("na", -15165);
spellPut("nai", -15158);
spellPut("nan", -15153);
spellPut("nang", -15150);
spellPut("nao", -15149);
spellPut("ne", -15144);
spellPut("nei", -15143);
spellPut("nen", -15141);
spellPut("neng", -15140);
spellPut("ni", -15139);
spellPut("nian", -15128);
spellPut("niang", -15121);
spellPut("niao", -15119);
spellPut("nie", -15117);
spellPut("nin", -15110);
spellPut("ning", -15109);
spellPut("niu", -14941);
spellPut("nong", -14937);
spellPut("nu", -14933);
spellPut("nv", -14930);
spellPut("nuan", -14929);
spellPut("nue", -14928);
spellPut("nuo", -14926);
spellPut("o", -14922);
spellPut("ou", -14921);
spellPut("pa", -14914);
spellPut("pai", -14908);
spellPut("pan", -14902);
spellPut("pang", -14894);
spellPut("pao", -14889);
spellPut("pei", -14882);
spellPut("pen", -14873);
spellPut("peng", -14871);
spellPut("pi", -14857);
spellPut("pian", -14678);
spellPut("piao", -14674);
spellPut("pie", -14670);
spellPut("pin", -14668);
spellPut("ping", -14663);
spellPut("po", -14654);
spellPut("pu", -14645);
spellPut("qi", -14630);
spellPut("qia", -14594);
spellPut("qian", -14429);
spellPut("qiang", -14407);
spellPut("qiao", -14399);
spellPut("qie", -14384);
spellPut("qin", -14379);
spellPut("qing", -14368);
spellPut("qiong", -14355);
spellPut("qiu", -14353);
spellPut("qu", -14345);
spellPut("quan", -14170);
spellPut("que", -14159);
spellPut("qun", -14151);
spellPut("ran", -14149);
spellPut("rang", -14145);
spellPut("rao", -14140);
spellPut("re", -14137);
spellPut("ren", -14135);
spellPut("reng", -14125);
spellPut("ri", -14123);
spellPut("rong", -14122);
spellPut("rou", -14112);
spellPut("ru", -14109);
spellPut("ruan", -14099);
spellPut("rui", -14097);
spellPut("run", -14094);
spellPut("ruo", -14092);
spellPut("sa", -14090);
spellPut("sai", -14087);
spellPut("san", -14083);
spellPut("sang", -13917);
spellPut("sao", -13914);
spellPut("se", -13910);
spellPut("sen", -13907);
spellPut("seng", -13906);
spellPut("sha", -13905);
spellPut("shai", -13896);
spellPut("shan", -13894);
spellPut("shang", -13878);
spellPut("shao", -13870);
spellPut("she", -13859);
spellPut("shen", -13847);
spellPut("sheng", -13831);
spellPut("shi", -13658);
spellPut("shou", -13611);
spellPut("shu", -13601);
spellPut("shua", -13406);
spellPut("shuai", -13404);
spellPut("shuan", -13400);
spellPut("shuang", -13398);
spellPut("shui", -13395);
spellPut("shun", -13391);
spellPut("shuo", -13387);
spellPut("si", -13383);
spellPut("song", -13367);
spellPut("sou", -13359);
spellPut("su", -13356);
spellPut("suan", -13343);
spellPut("sui", -13340);
spellPut("sun", -13329);
spellPut("suo", -13326);
spellPut("ta", -13318);
spellPut("tai", -13147);
spellPut("tan", -13138);
spellPut("tang", -13120);
spellPut("tao", -13107);
spellPut("te", -13096);
spellPut("teng", -13095);
spellPut("ti", -13091);
spellPut("tian", -13076);
spellPut("tiao", -13068);
spellPut("tie", -13063);
spellPut("ting", -13060);
spellPut("tong", -12888);
spellPut("tou", -12875);
spellPut("tu", -12871);
spellPut("tuan", -12860);
spellPut("tui", -12858);
spellPut("tun", -12852);
spellPut("tuo", -12849);
spellPut("wa", -12838);
spellPut("wai", -12831);
spellPut("wan", -12829);
spellPut("wang", -12812);
spellPut("wei", -12802);
spellPut("wen", -12607);
spellPut("weng", -12597);
spellPut("wo", -12594);
spellPut("wu", -12585);
spellPut("xi", -12556);
spellPut("xia", -12359);
spellPut("xian", -12346);
spellPut("xiang", -12320);
spellPut("xiao", -12300);
spellPut("xie", -12120);
spellPut("xin", -12099);
spellPut("xing", -12089);
spellPut("xiong", -12074);
spellPut("xiu", -12067);
spellPut("xu", -12058);
spellPut("xuan", -12039);
spellPut("xue", -11867);
spellPut("xun", -11861);
spellPut("ya", -11847);
spellPut("yan", -11831);
spellPut("yang", -11798);
spellPut("yao", -11781);
spellPut("ye", -11604);
spellPut("yi", -11589);
spellPut("yin", -11536);
spellPut("ying", -11358);
spellPut("yo", -11340);
spellPut("yong", -11339);
spellPut("you", -11324);
spellPut("yu", -11303);
spellPut("yuan", -11097);
spellPut("yue", -11077);
spellPut("yun", -11067);
spellPut("za", -11055);
spellPut("zai", -11052);
spellPut("zan", -11045);
spellPut("zang", -11041);
spellPut("zao", -11038);
spellPut("ze", -11024);
spellPut("zei", -11020);
spellPut("zen", -11019);
spellPut("zeng", -11018);
spellPut("zha", -11014);
spellPut("zhai", -10838);
spellPut("zhan", -10832);
spellPut("zhang", -10815);
spellPut("zhao", -10800);
spellPut("zhe", -10790);
spellPut("zhen", -10780);
spellPut("zheng", -10764);
spellPut("zhi", -10587);
spellPut("zhong", -10544);
spellPut("zhou", -10533);
spellPut("zhu", -10519);
spellPut("zhua", -10331);
spellPut("zhuai", -10329);
spellPut("zhuan", -10328);
spellPut("zhuang", -10322);
spellPut("zhui", -10315);
spellPut("zhun", -10309);
spellPut("zhuo", -10307);
spellPut("zi", -10296);
spellPut("zong", -10281);
spellPut("zou", -10274);
spellPut("zu", -10270);
spellPut("zuan", -10262);
spellPut("zui", -10260);
spellPut("zun", -10256);
spellPut("zuo", -10254);
}

/**
* 获得单个汉字的Ascii.
* @param cn char
* 汉字字符
* @return int
* 错误q回 0,否则q回ascii
*/
public static int getCnAscii(char cn)
{
byte[] bytes = (String.valueOf(cn)).getBytes();
if(bytes == null || bytes.length > 2 || bytes.length <= 0){ //错误
return 0;
}
if(bytes.length == 1){ //英文字符
return bytes[0];
}
if(bytes.length == 2){ //中文字符
int hightByte = 256 + bytes[0];
int lowByte = 256 + bytes[1];

int ascii = (256 * hightByte + lowByte) - 256 * 256;

//System.out.println("ASCII=" + ascii);

return ascii;
}

return 0; //错误
}

/**
* ҎASCII码到SpellMap中查扑֯应的拼音
* @param ascii int
* 字符对应的ASCII
* @return String
* 拼音,首先判断ASCII是否>0&<160,如果是返回对应的字符,
*
否则到SpellMap中查?如果没有扑ֈ拼音,则返回null,如果扑ֈ则返回拼?
*/
public static String getSpellByAscii(int ascii)
{
if(ascii > 0 && ascii < 160){ //单字W?br />return String.valueOf((char)ascii);
}

if(ascii < -20319 || ascii > -10247){ //不知道的字符
return null;
}

Set keySet = spellMap.keySet();
Iterator it = keySet.iterator();

String spell0 = null;;
String spell = null;

int asciiRang0 = -20319;
int asciiRang;
while(it.hasNext()){

spell = (String)it.next();
Object valObj = spellMap.get(spell);
if(valObj instanceof Integer){
asciiRang = ((Integer)valObj).intValue();

if(ascii >= asciiRang0 && ascii < asciiRang){ //区间扑ֈ
return(spell0 == null) ? spell : spell0;
}
else{
spell0 = spell;
asciiRang0 = asciiRang;
}
}
}

return null;

}

/**
* q回字符串的全拼,是汉字{化ؓ全拼,其它字符不进行{?br />* @param cnStr String
* 字符?br />* @return String
* 转换成全拼后的字W串
*/
public static String getFullSpell(String cnStr)
{
if(null == cnStr || "".equals(cnStr.trim())){
return cnStr;
}

char[] chars = cnStr.toCharArray();
StringBuffer retuBuf = new StringBuffer();
for(int i = 0,Len = chars.length;i < Len;i++){
int ascii = getCnAscii(chars[i]);
if(ascii == 0){ //取ascii时出?br />retuBuf.append(chars[i]);
}
else{
String spell = getSpellByAscii(ascii);
if(spell == null){
retuBuf.append(chars[i]);
}
else{
retuBuf.append(spell);
} // end of if spell == null
} // end of if ascii <= -20400
} // end of for

return retuBuf.toString();
}

public static String getFirstSpell(String cnStr)
{
return null;
}

public static void main(String[] args)
{
String str = null;
str = "谢v101普降喜雨";
System.out.println("Spell=" + CnToSpell.getFullSpell(str));

str = "张牙舞爪》。,";
System.out.println("Spell=" + CnToSpell.getFullSpell(str));

str = "李鹏Q可M场?;
System.out.println("Spell=" + CnToSpell.getFullSpell(str));

str = "猪aQ猪八戒?;
System.out.println("Spell=" + CnToSpell.getFullSpell(str));
}
}

 



脉凌|络 2012-02-11 16:56 发表评论
]]>
վ֩ģ壺 þAV뾫Ʒɫҹ| 91|| ĻƵ| ŷպۺϾþþ| ޾ƷóƬ?V߲| ǵӰȫ| ˿1ҳ| һëƬڼ| 99Ƶѹۿ| רר| 4480yy˽ӰԺ| AëƬA| 100018վ| Ƶ| avþDz| ޾ƷAAƬѽ| Ƶ69| Ļѿ| ۺɫͼƬ| һ| 2019Ļmvѿ | 鶹ƷѹƬ| ɫƷվ| ˳վ߲vr | ޹˸߹ۿ | һŷ| 츾ӰƬ| ߲ѹۿ| ŷպƷһ| պߵӰ| ޾Ʒһ³˿Ƭ| Ƶ| Ļȫ| ƬAëƬ| þþƷAVӰ| ޹ƷۺϾþþ | vƬƵ߹ۿƵ| ɫžžȫƵ| þ99Ʒѹۿ| һ| avһ߲ |