在java中,怎么把繁体字转化为简体字

 我来答
知春细雨蒙
2017-05-25 · 混迹网络滴知春细雨蒙,知无不答
知春细雨蒙
采纳数:3039 获赞数:63038

向TA提问 私信TA
展开全部
实现思路一:采用字符串的方式实现
[java] view plain copy
package com.bzu.converter;  
import java.util.Scanner;  
  
/** 
 * 思路一:采用字符串的方式实现 
 */  
public class JianFanConvert1 {  
    public static final String jianti = "万与丑专业丛东丝";  
    public static final String fanti = "万与丑专业丛东丝";
    public static void main(String[] args) {  
        Scanner input = new Scanner(System.in);  
        System.out.println("请输入你想转换的句子");  
        String words = input.next();  
        for (int i = 0; i < words.length(); i++) {  
            char tempChar = words.charAt(i);  
            int position = jianti.indexOf(tempChar);//此方法调用时间复杂度为O(n)  
            char fantiChar;  
            if (position == -1) {  
                fantiChar = tempChar;  
            } else {  
                fantiChar = fanti.charAt(position);  
            }  
            System.out.print(fantiChar);  
        }  
    }  
}  
分析上述实现,时间复杂度为O(n*n),当问题规模扩大时会非常耗时。
实现思路二:采用哈希算法实现
1.哈希方法
哈希方法在就是在键和值之间建立一个确定的对应函数关系hash(),就是key向value的换算关系,使得每一个键与结构中的一个唯一的存储位置相对应:值的存储位置=hash(键)即Value的位置=hash(key)
例如有一组“键值对”:<5,”tom”>、<8,”Jane”>、<12,”Bit”>、<17,”Lily”>、<20,”sunny”>,我们按照如下哈希函数对键进行计算:hash(x)=x%17+3,得出如下结果:hash(5)=8、hash(8)=11、hash(12)=15、hash(17)=3、hash(20)=6。
我们把<5,”tom”>、<8,”Jane”>、<12,”Bit”>、<17,”Lily”>、<20,”sunny”>分别放到地址为8、11、15、3、6的位置上。当要检索17对应的值的时候,只要首先计算17的哈希值为3,然后到地址为3的地方去取数据就可以找到17对应的数据是“Lily”了。
使用哈希方法,查询的时间复杂度为O(1),能够直接定位其位置,大大加快数据的查询速度。
2.哈希表
将数据采用哈希算法进行保存的数据结构就是哈希表,常见操作put、get、remove。
Java中的HashMap使用(Java内置的哈希表数据结构)
HashMap的主要方法
int size():得到Map中“键-值对”的数量
boolean isEmpty():Map是否是空的,也就是是否不含有任何“键-值对”
boolean containsKey(Object key):Map中是否含有以key为键的“键-值对”
boolean containsValue(Object value):Map中是否含有以value为值的“键-值对”
Object get(Object key):从Map中得到以key为键的值,如果Map中不含有以key为键的“键-值对”则返回null
Object put(Object key, Object value):向Map中存储以key为键、value为值的“键-值对”
Object remove(Object key):从Map中移除以key为键的“键-值对”
void clear():清除所有“键-值对”
Set keySet():得到所有的键
Collection values():得到所有的值
Set entrySet():得到所有的“键-值对”,Set中的类型是Map.Entry
 
[java] view plain copy
package com.bzu.converter;  
import java.util.HashMap;  
import java.util.Map;  
import java.util.Scanner;  
  
/** 
 * 思路二:采用哈希算法实现 
 */  
public class JianFanConvert2 {  
    public static final String jianti = "万与丑专业丛东丝";  
    public static final String fanti = "万与丑专业丛东丝";  
  
    public static void main(String[] args) {  
        Map<Character, Character> map=new HashMap<Character, Character>();  
        for(int i=0;i<jianti.length();i++){  
            map.put(jianti.charAt(i),fanti.charAt(i));  
        }  
        Scanner input = new Scanner(System.in);  
        System.out.println("请输入你想转换的句子");  
        String words = input.next();  
        /** 
         * 为了测试随着问题规模的扩大用时 
         */  
        for(int i=0;i<10;i++){  
            words=words+words;  
        }  
          
        long begin=System.currentTimeMillis();  
        for (int i = 0; i < words.length(); i++) {  
            char tempChar = words.charAt(i);  
            Character character=map.get(tempChar);  
            char fantiChar;  
            if (character == null) {  
                fantiChar = tempChar;  
            } else{  
                fantiChar=character;  
            }  
            System.out.print(fantiChar);  
        }  
        long end=System.currentTimeMillis();  
        System.out.println("\n用时:"+(end-begin));  
    }  
}  
分析上述算法实现,时间复杂度变为o(n)
问题探讨:
为什么算法复杂度由O(n*n)变成O(n),但是实际执行时间没有明显的变化?
print,数据在CPU、内存中运算都非常快,一旦与外设(打印机、网络(网卡)、显示设备(显卡))交换数据,速度就会慢很多

来自

junjunguoguo的专栏

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式