如何在出现空格后区分同一字符串中的不同字符

时间:2011-10-23 13:02:17

标签: java string

我修改了我的代码,我正在制作一个解码器,解码如下:

  

“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之后告诉它放置空格? 求救!

3 个答案:

答案 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)

您的编码已损坏:

  • AB编码为222
  • C编码为222

如果你不明白为什么这是一个问题,更多的解释对你没有帮助。

如果您想编写自己的编码器/解码器,请考虑playfair cypher