Java 出现空白后,如何区分同一字符串中的不同字符

Java 出现空白后,如何区分同一字符串中的不同字符,java,string,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(

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

“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时打印“abc”,就像在2022 222年一样,我如何实现这一点,我使用0作为标记和空格,我如何告诉它在读取字符串中的0后放置空格?
救命啊

您应该在空格上拆分行,并为每个元素计算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”。

您的编码已中断:

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

如果你不明白为什么这是一个问题,更多的解释将无助于你


如果您想编写自己的编码器/解码器有一些乐趣,请考虑./P>< P>代码>字符串LSTR=输入.NestLoin();代码>是问题所在。试着在运行时检查lStr的值——它将是整行的值(可能不足为奇地给出了方法的名称)

要继续使用这种方法,您需要像这样读入整行代码,然后检查每个标记(有一种方法可以这样做)是否与您的编码方案匹配

例如,如果您在中读到一行:

lStr=“2222222”

这与您的方案根本不匹配-您没有编码为“222”的值,是吗


HTH.

你能发布代码的其余部分吗?我的程序现在运行正常,但我有一个问题,假设我的输入是20222,那么输出应该是b c,我的意思是字符之间应该有空格如果字符串之间遇到0,我也使用0作为标记来分隔字符串,我的问题是如何在编译器读取0后插入一个空格(我也使用了0作为标记)。他提到所有2都应该用空格分隔。但如果不是这样的话,那么你是绝对正确的。我用0表示空间,所以a b是输入,那么编码器的输出是2022“如果你不理解为什么这是一个问题,更多的解释对你没有帮助。”这个网站需要的有用的音调要少得多。算法是这样的,如果你给密码一个像ab一样的输入,当它读到a后遇到b时,它会在a后插入一个空格,例如ab是输入,输出是22