我正在尝试打印String的输出以查找其中的大写和小写计数。
E.g。如果string =“AaaBBbCc”, 我需要输出为:“A1a2B2b1C1c1”。
即。大写'A'的计数,然后是小写'a'的计数,附加字符。
以下是我完成的代码段。任何人都可以建议它如何发展。 我知道代码不符合标准:(
public static void main(String[] args) {
String str = "AaaBBbCc";
int upperCount=0;
int lowerCount=0;
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if(ch>='A' && ch<='Z'){
upperCount++;
System.out.println("Uppercase letter is : "+ch+upperCount);
}
if(ch>='a' && ch<='z'){
lowerCount++;
System.out.println("Lower case letter is : "+ch+lowerCount);
}
}
System.out.println("upper count is :"+upperCount+" & lower count is: "+lowerCount);
}
答案 0 :(得分:0)
你走在正确的轨道上。如果您想要计算显示哪些字母,不仅是大写还是小写,您可以创建2个int[]
数组upperCaseCount
和lowerCaseCount = new int[26]
。您可以使用这些数组来计算出现的字母数。
提示您可以利用char
可以用作int
的事实来确定您应该增加哪个索引:
int index = ? //'a' should be 0 for lower, and 'A' should be 0 for upper
lowerCaseCount[index]++ or upperCaseCount[index]++;
答案 1 :(得分:0)
您在此尝试完成的内容称为Run-length encoding。这有时被称为无损数据压缩的一种形式,其中连续字符的长度被附加到该字符的单个实例。以下是来自RosettaCode的修改版本,可以为您解决问题:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RunLengthEncoding {
public static String encode(String source) {
StringBuffer dest = new StringBuffer();
for (int i = 0; i < source.length(); i++) {
int runLength = 1;
while (i+1 < source.length() && source.charAt(i) == source.charAt(i+1)) {
runLength++;
i++;
}
/* We will swap these so they fit your format of [Letter][Count]
dest.append(runLength);
dest.append(source.charAt(i));
*/
dest.append(source.charAt(i));
dest.append(runLength);
}
return dest.toString();
}
public static void main(String[] args) {
String example = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW";
System.out.println(encode(example));
}
}