永发信息网

【笔记本字母数字切换】如何把数字转换英文单词类似手机数字键盘类似手机...

答案:2  悬赏:20  手机版
解决时间 2021-03-11 18:41
  • 提问者网友:不爱我么
  • 2021-03-11 08:57
【笔记本字母数字切换】如何把数字转换英文单词类似手机数字键盘类似手机...
最佳答案
  • 五星知识达人网友:想偏头吻你
  • 2021-03-11 09:26
【答案】 你这个是考算法的啊!我想到了几点:
  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个最佳答案了!) 追问: 这是我目前乱写的,能帮忙运行看一下错在哪吗?可以的话麻烦帮我改一下,我会追加分 追答: 你要在word.txt中新增加一些单词,用空格来隔开。(java.util.Scanner 扫描器所使用的默认空白分隔符通过 Character.isWhitespace 来识别。不管以前是否更改,reset() 方法将把扫描器分隔符的值重置为默认空白分隔符。) 还有,在alphabet 中少了个q,要添上,7777和9999必须是4个你才3个,斗不起26个英文字母啊。 其他都没问题了,就是那个for()不是很好,每个次都要输出no solution。(要遍历words,如果当前word找到了,就输出出来,如果没有:如果words没有遍历完,继续下一次,如果到尽头,就该输出no solution) 其他的都能行。 追问: 非常感谢,我加了word.txt文件,一个小问题,我有手动打ad ae af,但是我运行输入23只出现ad第一个,请问这个要怎么改?多谢,再次麻烦你了! 追答: 将那个for改一下: int i=0; for(;i list=new ArrayList(); list.add(words.get(i)); } } if(i==words.seiz()) System.out.println(no solution); 当然,如果你不需要将最后的结果用来处理,只是问了验证正确与否,直接把System.exit(0)去掉就行了。 for (String word : words) if (code.equals(toNumber(word))){ System.out.println(word); //System.exit(0); //不要句。 }
全部回答
  • 1楼网友:第幾種人
  • 2021-03-11 09:34
好好学习下
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯