/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="aaabbddaabbcc";
int count=1;
String finalString="";
for(int i=1;i<str.length()-1;i++)
{
if(str.charAt(i)==str.charAt(i+1))
{
++count;
}
else
{
finalString+=str.charAt(i)+count+",";
count=1;
}
}
System.out.println(finalString);
}
}
我将此作为我的o / p:99,100,102,99,100, 有人能告诉我如何解决这个问题并不确定这是什么?
然而以下程序使用拆分工作 公共类NoOfConsAlphabet {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="aaabbddaabbcc";
String[] splitString=str.split("");
int count=1;
String finalString="";
for(int i=1;i<str.length()-1;i++)
{
if(splitString[i].equals(splitString[i+1]))
{
++count;
}
else
{
finalString+=splitString[i]+count+",";
count=1;
}
}
System.out.println(finalString);
}
} O / P:A3,B2,D2,A2,B2,
答案 0 :(得分:0)
user3296744似乎正在处理的算法是Run-length encoding。
这里的问题不仅仅是实际输出:
"o/p:a1b3d2a2b2c2"
与所需的输出不匹配:
"o/p:3a, 2b, 2d, 2a, 2b, 2c"
但仔细观察后,实际输出的计数相对于随附的字母移动了一个;也就是说,3应该与a
匹配,它与b
匹配,依此类推。
如果您在调试模式下运行代码,并在行后面有一个断点:
String[] str2=str.split("");
您会注意到str2
数组并不是您所期望的。它不是一个包含13个元素的数组,而是实际上有14个元素,第一个元素是null
。
因此我建议您避免使用split()
函数,而不是将字符串分解为数组,您可以使用charAt()
函数来访问所需的字符。注意:这可能需要您将for循环修改为标准版本而不是每个版本。
答案 1 :(得分:0)
我确信这可以做得更短,更甜美但是......
public class Main {
public static void main(String[] args) {
findAndPrintConsecutiveCharacters("aaabbddaabbcc");
}
private static void findAndPrintConsecutiveCharacters(String sToPrint){
for(int i = 0; i < sToPrint.length(); i ++){
char c = sToPrint.charAt(i);
int occurences = 1;
if(i <= sToPrint.length() - 2) { //limit the nested for so we dont go out of bounds
for (int i2 = i + 1; i2 < sToPrint.length(); i2 ++){
char c2 = sToPrint.charAt(i2);
if(c2 == c)
occurences += 1;
else{
i += occurences - 1; //shift i by the amount of occurences, this will prevent counting consecutive chars multiple times
break;
}
}
}
else
break; //we are on our last char
System.out.println(String.valueOf(occurences) + String.valueOf(c));
}
}
}
输出
3a
2b
2d
2a
2b
2c
我建议您使用更好的命名约定和已定义的构造,如String.charAt(),而不是使用空的正则表达式进行拆分。你有什么可能会工作,如果你乱用它,但如果你重新分配你指定它的“指针”,它是非常令人困惑的。