编程填空题,中间部分是我自己写的,但是怎么都不能输出像这样:
import java.util.Scanner;
public class Work6 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str = input.nextLine();
StringBuilder sb = new StringBuilder("");
char current = str.charAt(0);
int count = 1;
-----------
for (int i = 0; i < str.length(); i++) {
for (int j = 65; j < 122; j++) {
current=str.charAt(i);
if (current==j){
count++;
}
}
}
count -= 1;
----------
if (count == 1) sb.append(current);
else sb.append(current).append(count);
System.out.println(sb.toString());
}
}
```朋友们帮助一下
aaaabbbccddddaaaccc
这种是写成a4b3c2d4a3c3还是写成a7b3c5d4?这两种的写法不一样
先给个例子,不知道是否符合题意,你先参考看一下吧:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入一串小写字母:");
String line = scan.nextLine();
if(!"".equals(line.trim())){
String[] arr = line.split(""); //分割成单个字符串
List<String> list = Arrays.asList(arr); //转成List
Set<String> set = new HashSet<String>(list); //转成set去重
for(String key : set){ //遍历set
int oldC = line.length(); //计算原字符串长度
int newC = line.replace(key, "").length(); //用空字符替换指定字符后再计算长度
String info = (oldC-newC)>1?key+(oldC-newC):key; //两个字串长度差即为指定字符出现次数,次数大于1的再字符后加数字
System.out.print(info); //打印字符+数字不换行
}
}else{
System.out.println("未检测到输入!");
}
scan.close();
}
根据题意和数组分析,相同字母是连续存在的。
那么直接比较当前数据和前一个数据是否一致即可。
特殊处理:1.应从下标开始和前一个比较,同,++。不同,输出字符和数字然后重置
2.若是最后一个字符和之前相同需要判断输出。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str = input.nextLine();
StringBuilder sb = new StringBuilder("");
char current = str.charAt(0);
int count = 1;
for (int i = 1; i < str.length(); i++) {
char a = str.charAt(i); //当前i指向数据 ,从下标1开始
if (current == a) {
count++;
if (i == str.length() - 1) {// 当时最后一个数据时,相等输出字符+次数
sb.append(current).append(count);
}
} else {
if (count == 1)
sb.append(current);
else
sb.append(current).append(count);
// 不同了,重置字符和次数
count = 1;
current = a;
}
}
System.out.println(sb.toString());
}