PS:做了4年,自我感觉.NET到瓶颈了,而且公司并没有深入运用.NET技术的项目,自我学习感觉也没太大动力(请骂我懒T_T)。再加上技术年限越往上走,了解到的.NET职业提升环境就越来越艰难(个人理解,喷子就不用喷了,喷了对我也没影响,哈哈哈)。于是于半月前开始学习JAVA技术。公司刚好成立了JAVA开发的小组,就申请调过去了。公司有很多组件都是.NET环境的,对于纯粹的JAVA攻城狮来说,对于.NET代码也比较头疼,因此,此类任务就扔了一个给我。
 
  • 组件的功能:

          由于公司的业务需求,对于中文姓名中的生僻字(针对常用的GB2312来说,不是GBK),需要进行识别并转换成拼音。对于多个中文姓名,整个姓名拼音字符串出现重复的姓名,需要提示。
          首先说说算法:
          GB2312有自己的编码表以及拼音的索引表(我这里是网上找的) ,然后可以根据自己设计的查找算法制作相应的资源数组。
          GB2312的16~55区的一级汉字由根据拼音排序的。将一级汉字转为字节数组,根据算法定位到前面的资源数组,即可找到相应的拼音。
          GB2312的56~87区的二级汉字因为不是使用拼音排序,可以特殊处理,也可以设计兼容的算法(因此资源数组需要自行设计)。
          对于生僻字:
          超过GB2312中汉字区位的生僻字(当然字节数组依然是两位),目前使用的是直接导入GBK中的生僻字信息,做成索引器,然后进行索引匹配。
  • 不同点:

          汉字字符串转字节数组:
          .NET中,汉字字符串使用GB2312和GBK编码方式,对于生僻字,得到的字节都是GBK中的两位字节数组信息。
          但是JAVA中,用GB2312得到的是一个“?”的ASCII码中的字节,只有使用GBK才能获取到相应的两位字节数组。(毕竟GBK对于GB2312是向下完全兼容的)
          无符号整数:
          由于使用的是索引资源,所以在进行相关的索引计算时,会用到无符号整数。
          .NET中有自己定义的无符号整数,而JAVA中是不会存在有无符号整数的,所以需要进行升位的运算,以及存储(UInt16对应Int,UInt32对应Long)。
          字节数组(两个字节)转无符号整形:
          .NET中有直接的方法。需要注意的是,有些方法进行回转时,低位在前面,而高位在后面。
          JAVA中需要自己写相应的方法。需要注意高低位的转换,以及Uint在JAVA中的表示形式。
          文件读取:
          由于需要读取生僻字,因此文件格式转成了UTF-8。在Windows系统中,MS会为非ASCII编码的文件的头部,加入一个BOM(Byte Order Mark),字节顺序标记。
          JAVA在读取含有BOM的文件时,读取第一个字符会出现一个?,可能会影响到程序的后续处理。
          解决方法也比较简单,用类似NOTEPAD++的软件转成无BOM的编码就可以了。
  • 总结:

          语法大体相同,但是JAVA确实没那么多的内置语法,很多底层都需要自己编写(公司不让引用第三方的类库)。
          感觉.NET虽然很方便,但是如果不主动,是不用也不会明白很多计算机底层的东西。(其实还是我懒T_T)
          JAVA则需要了解很多底层的知识,才能正确的编程,虽然比较痛苦,但是个人感觉需要了解的东西会很多。
          感觉入门的话,.NET确实是一门很不错的语言,但是如果没什么主动性的话,JAVA对于程序员对程序相关知识的了解,还是很有帮助的。

.NET转JAVA之拼音组件的更多相关文章

  1. java中解决组件重叠的问题(例如鼠标移动组件时)

    java中解决组件覆盖的问题!     有时候在移动组件的时候会出现两个组件覆盖的情况,但是你想让被覆盖的组件显示出来或者不被覆盖! 在设计GUI时已经可以定义组件的叠放次序了(按摆放组件的先后顺序) ...

  2. 谈谈Java的集合组件

    让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...

  3. java web(五):java web三大组件之另外两个和八大监听器

    java的三大组件指Servlet.Filter.Listener.八大监听器指八个接口.前面介绍了Servlet,现在介绍一下Filter拦截器以及拦截地址的设置, Listener监听那些事件. ...

  4. Java日期处理组件joda-time

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/175 Java日期处理组件joda-time 平常在开发过 ...

  5. Java中日志组件详解

    avalon-logkit Java中日志组件详解 lanhy 发布于 2020-9-1 11:35 224浏览 0收藏 作为开发人员,我相信您对日志记录工具并不陌生. Java还具有功能强大且功能强 ...

  6. java基础 常用组件

    几个常用组件: 在图形用户界面编程中,我们常常会提供用户登陆界面,比如登陆到会员管理系统,登陆到工资管理系统,仓库管理系统等,如下图我们就会用到: 1. 文本框(JTextField) 2. 密码框( ...

  7. Java 动态编译组件 & 类动态加载

    1.JDK6 动态编译组件 Java SE 6 之后自身集成了运行时编译的组件:javax.tools,存放在 tools.jar 包里,可以实现 Java 源代码编译,帮助扩展静态应用程序.该包中提 ...

  8. java上传组件FileUpload

    如果表单中有文件要上传,也就是有<input type="file" name="name"/> 就需要在form标签中添加enctype=&quo ...

  9. 【Java】JTable组件的构造函数和设置列宽

    使用JTable组件 类层次结构图: java.lang.Object --java.awt.Component --java.awt.Container --javax.swing.JCompone ...

随机推荐

  1. Java 垃圾收集与内存回收

    垃圾收集(Garbage collection, GC) 收集原理: .引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加一:引用实效,就减一:它的问题是无法解决循环引用. 2 ...

  2. 使用 T-SQL 计算当日日期、本周第一天与最后一天

    --当日日期 ); SET @Today = DATENAME(YEAR, GETDATE()) + '-' + DATENAME(MONTH, GETDATE()) + '-' + DATENAME ...

  3. (笔记)Linux内核学习(七)之内核同步机制和实现方式

    一 原子操作 指令以原子的方式执行——执行过程不被打断. 1 原子整数操作 原子操作函数接收的操作数类型——atomic_t //定义 atomic_t v;//初始化 atomic_t u = AT ...

  4. 安装Window Services 提示错误 [SC] OpenSCManager FAILED 5

    通过CMD注册Windows服务 之前一直这样写一直也是注册成功,今天却遇到了问题SC Manager 失败 sc create  RenService binPath=  C:\Tools\Stat ...

  5. 彻底理解JAVA动态代理

    代理设计模式 定义:为其他对象提供一种代理以控制对这个对象的访问. 代理模式的结构如下图所示. 动态代理使用 java动态代理机制以巧妙的方式实现了代理模式的设计理念. 代理模式示例代码 public ...

  6. Simple Molecules(简单)

    Simple Molecules time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  7. seajs中spm压缩工具使用

    seajs是个好东西,用起来很方便,但是她的压缩工具spm确不被网友看好,因为使用起来很麻烦,捯饬了一天多,终于勉强能压缩了,这里就简单记录一下. 按照地址:http://www.zhangxinxu ...

  8. Fireasy新版本发布

    1.5.40.42028  2015-2-4 ** Fireasy.Common 1.DynamicBuilder新增使用表达式SetCustomAttribute的重载方法 2.DateTimeEx ...

  9. JS思维之路菜鸟也能有大能量(1)--模拟push

    因为本系列文章属于思维类,所以不做基础方法的讲解. 任务:首先我定义了一个变量var arr = [0,1,2,3,4,5];我现在想模拟push方法在这个数组的5后面加东西,我们应该怎么做?给你5分 ...

  10. 二叉搜索树BinarySearchTree(C实现)

    头文件—————————————————————————————— #ifndef _BINARY_SEARCH_TREE_H_ #define _BINARY_SEARCH_TREE_H_ #inc ...