我修改了我的代码,我正在制作一个解码器,解码如下:
“2”为“a”,“22”为“b”,“222”为“c”,“3”为“d”等
我写了以下逻辑来实现它
Scanner input = new Scanner(System.in);
System.out.println("Please enter the string encoded with appropriate T9 encoding algorithm");
String lStr=input.nextLine();
String[] tokens=lStr.split("\\s|0");
System.out.printf("Number of elements are: %d\n The text entered is: ", tokens.length);
for(String token: tokens)
{
if(token.equals("2")){
output=token.replace("2", "a");
}
else if(token.equals("22")){
output=token.replace("22","b");
}
//etc
如果我给它一个输入,如2022 222,它将其解码为“abc”,这是正确的,但我希望它在遇到0时打印“a bc”,就好像在2022 222,我怎么能实现这一点,我使用0作为标记以及空格,如何在字符串中读取0之后告诉它放置空格? 求救!
答案 0 :(得分:1)
您应该在空格上分割线条,并且对于每个元素,您计算2的数量并替换相应的字符。然后你也没有得到开关爬行。
这只是一个例子:
String str = "2 22 222";
if (!str.matches("^[2\\s]+$")) {
System.out.println("Invalid string!");
return;
}
String res = "";
for (String elm : str.split("\\s+")) {
int cnt = elm.length();
res += (char) ('a' + cnt - 1) + " ";
}
System.out.println("res: "+ res);
res
将是“a b c”。
答案 1 :(得分:1)
String lStr=input.nextLine();
是问题所在。尝试在运行时检查lStr的值 - 它将是整个行的值(也许不出所料地给出了方法的名称)。
要继续这种方法,您需要像以前一样阅读整行,然后检查每个令牌(有一种方法可以执行此操作)以匹配您的编码方案
E.g。如果您在
中阅读行lStr =“2 22 222 2222”;
根本不符合您的计划 - 您没有编码为“2 22”的值吗?
HTH。
答案 2 :(得分:0)