请帮助使用下面的java代码。
例如,当我输入aabbcccd时,输出是99100102d,但应该是a2b2c3d。有人能告诉我这段代码有什么错误吗(此代码尝试捕获输入和输出特定字符的键入频率
import java.util.*;
public class Main {
public static void main(String args[]) {
try {
Scanner scn = new Scanner(System.in);
String s = scn.nextLine(); // taking input
StringBuilder str = new StringBuilder(s);
StringBuilder str_new = new StringBuilder();
int i = 0 ;
while (i < str.length()) {
int count = 1;
while (i < str.length()-1 && str.charAt(i) == str.charAt(i+1)){
count += 1;
i++;
}
if (count == 1)
str_new.append(str.charAt(i));
else
str_new.append(str.charAt(i) + (char)count);
i++;
}
System.out.println(str_new);
} catch (Exception e) {
return;
}
}
}
2条答案
按热度按时间2vuwiymt1#
问题来自
str.charAt(i) + (char)count
,因为它们是2个字符,所以用它们的int
价值观,通过使用连续的
append()
电话您可以通过使用外部
for-loop
三元运算符append
,仅增量i
在内部while
通过保存i
之前qnakjoqk2#
你的主要问题是
StringBuilder
输入我在这个例子中显示的值。但在这个例子中,我使用正则表达式。(.)
是匹配任何字符的捕获块\\1*
指第一个捕获块,后跟0个或多个相同字符。下面的代码为输入的文本构造匹配器,然后继续查找后续匹配项。它们可以打印出来作为发现或放置在
StringBuilder
就像我选择的那样。为了
aaabbbbcadb
印刷品