【问题标题】:how to check if the char in a string is the same as the previous char?如何检查字符串中的字符是否与前一个字符相同?
【发布时间】:2017-02-09 14:09:40
【问题描述】:

问题要求比较字符串是否有连续相同的字母,并将其重写为字母的数字加上字母,例如5A中的AAAAA。但是当我使用 if 语句进行比较时,输出变成了一个很长的数字,而不是想要的结果。

这是问题的一部分: 游程编码是一种简单的压缩方案,当数据集主要由大量重复字符组成时最适合使用。例如,AAAAAAAAAA 是 10 个 A 的运行。我们可以使用 *A10 之类的符号对这个运行进行编码,其中 * 是表示运行的特殊标志字符,A 是运行中的符号,10 是运行的长度。

代码如下:

import java.util.Scanner;

public class RunLengthEncoding {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter input string: ");
    String s = input.nextLine();
    for (int a = 0; a < s.length(); a++) {
        if ((s.charAt(a) < 'A' || s.charAt(a) > 'Z')) {
            System.out.print("Bad input");
            System.exit(0);
        }
    }
    System.out.print("Enter flag character: ");
    char flag = input.nextLine().charAt(0);
    if (flag == '#' || flag == '$' || flag == '*' || flag == '&') {

        int count = 0;
        for (int i = 1; i < s.length(); i++) {
            if(s.charAt(i)=s.charAt(i-1));
            count++;

            if (count == 1)
                System.out.print(s.charAt(i));
            if (count == 2)
                System.out.print(s.charAt(i) + s.charAt(i));
            if (count == 3)
                System.out.print(s.charAt(i) + s.charAt(i) + s.charAt(i));
            else
                System.out.print(flag + s.charAt(i) + (count + 1));

        }

    } else
        System.out.print("Bad input");
}
}

【问题讨论】:

  • 有一个 ;在你的 if 后面(在 count++ 之前)。那是你的问题吗?编辑:我还建议在 if 语句中始终使用括号。

标签: java if-statement while-loop


【解决方案1】:

你的问题在这里:

if(s.charAt(i)=s.charAt(i-1));

首先,您必须使用== 而非= 来比较chars。其次,将; 放在if 语句之后将导致它立即终止。换句话说,以下行不再是if 语句的一部分。改为:

if(s.charAt(i) == s.charAt(i-1))

编辑

关于你的评论,这样的事情应该可以工作,虽然我没有测试过。只需将您当前的大 if 块替换为以下内容:

if (flag == '#' || flag == '$' || flag == '*' || flag == '&') {
    char last = ' ';
    char curr = ' ';
    int count = 1;
    for (int i = 0; i < s.length(); i++) {
        last = curr;
        curr = s.charAt(i);
        if (curr == last) {
            count++;
        } else if (last != ' ') {
            System.out.print(("" + count) + last);
            count = 1;
        }
    }
    System.out.print(("" + count) + last);
}

【讨论】:

  • 谢谢指出问题,但是结果还是不正确。比如我输入AAAAAABBBBB,结果应该是6A5B,但实际输出的是A,后面跟着一些数字。你能告诉我如何解决这个问题
  • @HongxuLin 在 Java 中,char 值是一个数字,因此 s.charAt(i) + s.charAt(i) 将两个字符的 unicode 值相加以生成一个数字。它没有进行字符串连接,而这正是您想要做的。与flag + s.charAt(i) + (count + 1) 相同,将三个数字相加。
  • @HongxuLin 看到我的编辑。如果有帮助,请记得点赞并接受。
  • 它工作但程序只计算第一个字母的数量然后停止。我通过输入 AAAAABBBBB 进行测试,但它显示 1 5A。如何让它继续计数后面的字母,以及如何去掉前面的1。
  • @HongxuLin 抱歉,已修复。自己测试了一下。这次完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多