gpt4 book ai didi

java - 如何确保仅当字符不同时才执行 Print 语句?

转载 作者:行者123 更新时间:2023-11-30 07:41:48 24 4
gpt4 key购买 nike

所以,我正在编写一个字符串压缩程序。如果输入是aabbccc,输出应该是a2b2c3

但是在我的程序中,我的输出是a2a2b2b2c3c3c3。那是因为我的 Print 语句在 for 循环中。这不应该在那里。

如何只在字符串中的两个字符不相等时才执行打印语句?以便我获得正确的输出?

我已经尝试过其他方法来执行字符串压缩程序,但这种使用集合的方法对我来说似乎是最简单的。

public class Compress {

static int i;
static int freq;

public static void main(String args[]) {
System.out.println("Enter a String");
Scanner sc= new Scanner(System.in);
String str=sc.nextLine();
List<Character> arrlist = new ArrayList<Character>();
for(int i=0; i<str.length();i++){
arrlist.add(str.charAt(i));
}
for(int i=0; i<str.length();i++){
freq = Collections.frequency(arrlist, str.charAt(i));
System.out.print(str.charAt(i)+""+freq);
}
}
}

想要的结果

Input: aabbccc
Output: a2b2c3

我得到了什么

Input: aabbccc
Output: a2a2b2b2c3c3c3

最佳答案

您可以使用下面的代码,不需要有 2 个嵌套循环来进行压缩。一个循环遍历输入字符串就绰绰有余了。

class Compress {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a string: ");
String inputString = scanner.nextLine();
scanner.close();
System.out.println("Compressed Input: " + compressInput(inputString));
}

private static String compressInput(String str) {
if(str.isEmpty())
return "";
if(str.length() == 1)
return str + "1";

StringBuilder result = new StringBuilder();
int cmpt = 1;
for (int i = 1; i < str.length(); i++) {
if(str.charAt(i - 1) == str.charAt(i))
cmpt++;
else {
result.append(str.charAt(i-1));
result.append(cmpt);
cmpt=1;
}
}
result.append(str.charAt(str.length()-1));
result.append(cmpt);
return result.toString();
}

}

输出示例:

Enter a string: aaabbbbccddddeeeefg
Compressed Input: a3b4c2d4e4f1g1

关于java - 如何确保仅当字符不同时才执行 Print 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55584573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com