我的字符串压缩循环有点偏。过去5天我一直在做这项任务,我无法弄清楚我的生活有什么不对。有人可以帮助我吗?
例如,我传递了字符串"TTTTrrrEe"
,而不是获取T4r3Ee
,我得到T4r3EeTT
。我不知道为什么它会像这样跳回到字符串的开头,但我越来越近了。我们只能使用charAt
,equals
,length
和{{1来自字符串类。
有人可以通过帮助纠正我的逻辑来帮助指导我朝着正确的方向前进吗?我仍然想尝试自己编写代码,看看它是如何分配的。
substring
答案 0 :(得分:3)
由于这是一个学习练习,我不会尝试修复你的代码,只需指出一些事情来解决它:
if (i !=s.length()-1)
循环条件更改为for
i < s.length()-1
条件变得不必要
i
获取位置char ch1 = s.charAt(i)
的角色,并使用==
运算符比较两个角色,而不是在其上调用equals()
。count
为零(您的count < 1
条件等同于count == 0
)时,除了{{1}的第一个字符外,还会打印当前字符和后面的字符。然后是计数。这看起来不正确。temp
,而不是在每次迭代时设置它。这看起来不正确。StringBuilder
和temp
时,使用temp
和append()
,而不是使用普通String
并执行连接,这是一种更好的{{1}}增长方式。答案 1 :(得分:0)
尝试使用这样的逻辑;
int count = 0;
for(int i =0; i < string.length()-1; i++){
if(string.charAt(i) == string.charAt(i + 1)){
count++;
// DO SOME OPERATION
}
}
答案 2 :(得分:0)
temp = s.substring(count,count+1);
与位置(i
)无关,但 size 。
事实上,我会尝试用外在的合理名称重写它:
char repeatedChar = `\u0000`; // Not present.
int repetitions = 0;
由于没有名字count
,你遇到了麻烦。
答案 3 :(得分:0)
工作代码:
public class HelloWorld {
public static void compress(String s){
StringBuilder buff = new StringBuilder();
char tmp = '\0';
int index = 1;
for(int i = 0; i < s.length(); i++){
char curr = s.charAt(i);
if(buff.length() == 0){
tmp = curr;
buff.append(tmp);
continue;
}
if(curr == tmp){
index++;
}
else{
if(index > 1){
buff.append(index);
index = 1;
tmp = curr;
}
buff.append(curr);
}
}
System.out.println(buff.toString());
}
public static void main(String args[]){
compress("TTTTrrrEe");
}
}
输出:T4r3Ee
compress("TTsssssssssssTTrrrEe");
输出:T2s11T2r3Ee
答案 4 :(得分:0)
尝试这个
public class Compress {
/**
* @param args
* @author Rakesh KR
*/
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++;
}
dest.append(source.charAt(i));
dest.append(runLength);
}
return dest.toString();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String example = "aaaaaaBBBBccc";
System.out.println("Encode::"+encode(example));
}
}
答案 5 :(得分:0)
String temp = s.substring(0,1);
temp.equals(s.substring(i,i+1))
如果是这两个句子,您应该使用char
而不是String,因此:
char temp = s.charAt(0)
temp == s.charAt(i)
我将从3个变量开始:
char lastCharacter = inputString.charAt(0);
int count = 1;
String result = "";
然后继续在循环中处理输入字符串:
if (length <= 1) return inputString;
for i = 1 ; i < length;i++
if (inputString.charAt(i) == lastCharacter && i != length-1)
count++
else
if count == 1
result += lastCharacter
else
result = result + lastCharacter + count;
count = 1;
end if
lastCharacter = inputString.charAt(i);
end if
end for
return result;