Java 如何实现日文新旧字体之间的转换

Python019

Java 如何实现日文新旧字体之间的转换,第1张

实现思路一:采用字符串的方式实现

[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 = 0i <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)

例如有一组“键值对”:、、、、,我们按照如下哈希函数对键进行计算:hash(x)=x%17+3,得出如下结果:hash(5)=8、hash(8)=11、hash(12)=15、hash(17)=3、hash(20)=6。

我们把、、、、分别放到地址为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 map=new HashMap()

for(int i=0i<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=0i<10i++){

words=words+words

}

long begin=System.currentTimeMillis()

for (int i = 0i <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、内存中运算都非常快,一旦与外设(打印机、网络(网卡)、显示设备(显卡))交换数据,速度就会慢很多

可能是环境变量设置不同

JAVA工具栏windows中最后一栏点开(我英文不好只知道位置)

左边筐里有很多+,点开第一个

里面应该还有3个+

点击其中一个

有个default

AU8

other

在other中选择其中一个就行,不行的话一个个试