优质解答
你这个是考算法的啊!我想到了几点:
1:你要把words.txt单词库中的单词逐个分离出来.这个不难,只要单词库中的单词之间有固定的界限(比如用空格来区分,或是逗号什么的)都可以用java.util.StringTokenizer类来分离.
2:将分离出来的单词存放在ArrayList list中
3:建立英文字母到数字的映射关系:public int index(chat c)//根据输入的char返回对应的数字.不如D/E/F返回3,需要注意的是,大D和小D都返回3.这个不难吧.
4:建立一个单词到数字的映射.public byte[] NOEncoding(String s)用到String类的charAt(int index)方法,逐个提取char,再用index()方法对应的数字来来确定,并将结果存放在byte数组中
5:遍历list链表,利用NOEncoding()方法,建立每个单词到数字的映射,就形成了新的单词库了.
6:最后一步啦,将输入的数字和对应的新的单词库做比较就行了.你的目的达到了.
附:java.util.StringTokenizer
ublic class StringTokenizerextends Objectimplements Enumerationstring tokenizer 类允许应用程序将字符串分解为标记.tokenization 方法比 StreamTokenizer 类所使用的方法更简单.StringTokenizer 方法不区分标识符、数和带引号的字符串,它们也不识别并跳过注释.
可以在创建时指定,也可以根据每个标记来指定分隔符(分隔标记的字符)集.
StringTokenizer 的实例有两种行为方式,这取决于它在创建时使用的 returnDelims 标志的值是 true 还是 false:
如果标志为 false,则分隔符字符用来分隔标记.标记是连续字符(不是分隔符)的最大序列.
如果标志为 true,则认为那些分隔符字符本身即为标记.因此标记要么是一个分隔符字符,要么是那些连续字符(不是分隔符)的最大序列.
StringTokenizer 对象在内部维护字符串中要被标记的当前位置.某些操作将此当前位置移至已处理的字符后.
通过截取字符串的一个子串来返回标记,该字符串用于创建 StringTokenizer 对象.
下面是一个使用 tokenizer 的实例.代码如下:
StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
输出以下字符串:
this
is
a
test
public StringTokenizer(String str,
String delim)为指定字符串构造一个 string tokenizer.delim 参数中的字符都是分隔标记的分隔符.分隔符字符本身不作为标记.
注意,如果 delim 为 null,则此构造方法不抛出异常.但是,尝试对得到的 StringTokenizer 调用其他方法则可能抛出 NullPointerException.
参数:
str - 要解析的字符串.
delim - 分隔符.
抛出:
NullPointerException - 如果 str 为 null.
附2:
我觉得这种思路较好一些:
1>如果建立数字到英文字母的映射,那么一个数字将返回多个字母,这个不是很好吧,不如2--abc.
2>建立数字到单词的映射,算法上不太好实现.比如224,就是abc abc ghi的全排雷,就要3*3*3这么多种,要是中文字还可以接受做多也就4*4*4*4*4这么多.但是英文不同了.
3>你单词库中的单词毕竟是有限的,就拿中文汉字来说,最多也1W左右.英文单词也不过如此.
所以这个不是大问题.
综上,我最终选择了这个算法来实现.
代码之际写吧.应该不存在大问题了.
(回答很辛苦啊,我还差6个最佳答案了!)
你这个是考算法的啊!我想到了几点:
1:你要把words.txt单词库中的单词逐个分离出来.这个不难,只要单词库中的单词之间有固定的界限(比如用空格来区分,或是逗号什么的)都可以用java.util.StringTokenizer类来分离.
2:将分离出来的单词存放在ArrayList list中
3:建立英文字母到数字的映射关系:public int index(chat c)//根据输入的char返回对应的数字.不如D/E/F返回3,需要注意的是,大D和小D都返回3.这个不难吧.
4:建立一个单词到数字的映射.public byte[] NOEncoding(String s)用到String类的charAt(int index)方法,逐个提取char,再用index()方法对应的数字来来确定,并将结果存放在byte数组中
5:遍历list链表,利用NOEncoding()方法,建立每个单词到数字的映射,就形成了新的单词库了.
6:最后一步啦,将输入的数字和对应的新的单词库做比较就行了.你的目的达到了.
附:java.util.StringTokenizer
ublic class StringTokenizerextends Objectimplements Enumerationstring tokenizer 类允许应用程序将字符串分解为标记.tokenization 方法比 StreamTokenizer 类所使用的方法更简单.StringTokenizer 方法不区分标识符、数和带引号的字符串,它们也不识别并跳过注释.
可以在创建时指定,也可以根据每个标记来指定分隔符(分隔标记的字符)集.
StringTokenizer 的实例有两种行为方式,这取决于它在创建时使用的 returnDelims 标志的值是 true 还是 false:
如果标志为 false,则分隔符字符用来分隔标记.标记是连续字符(不是分隔符)的最大序列.
如果标志为 true,则认为那些分隔符字符本身即为标记.因此标记要么是一个分隔符字符,要么是那些连续字符(不是分隔符)的最大序列.
StringTokenizer 对象在内部维护字符串中要被标记的当前位置.某些操作将此当前位置移至已处理的字符后.
通过截取字符串的一个子串来返回标记,该字符串用于创建 StringTokenizer 对象.
下面是一个使用 tokenizer 的实例.代码如下:
StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
输出以下字符串:
this
is
a
test
public StringTokenizer(String str,
String delim)为指定字符串构造一个 string tokenizer.delim 参数中的字符都是分隔标记的分隔符.分隔符字符本身不作为标记.
注意,如果 delim 为 null,则此构造方法不抛出异常.但是,尝试对得到的 StringTokenizer 调用其他方法则可能抛出 NullPointerException.
参数:
str - 要解析的字符串.
delim - 分隔符.
抛出:
NullPointerException - 如果 str 为 null.
附2:
我觉得这种思路较好一些:
1>如果建立数字到英文字母的映射,那么一个数字将返回多个字母,这个不是很好吧,不如2--abc.
2>建立数字到单词的映射,算法上不太好实现.比如224,就是abc abc ghi的全排雷,就要3*3*3这么多种,要是中文字还可以接受做多也就4*4*4*4*4这么多.但是英文不同了.
3>你单词库中的单词毕竟是有限的,就拿中文汉字来说,最多也1W左右.英文单词也不过如此.
所以这个不是大问题.
综上,我最终选择了这个算法来实现.
代码之际写吧.应该不存在大问题了.
(回答很辛苦啊,我还差6个最佳答案了!)