Java 返回一个新字符串,所有出现的输入字符都移到末尾
我必须返回一个新字符串,将所有出现的输入字符移到末尾。我试图通过提供的字符串比较给定的字符,但无法获得预期的输出Java 返回一个新字符串,所有出现的输入字符都移到末尾,java,Java,我必须返回一个新字符串,将所有出现的输入字符移到末尾。我试图通过提供的字符串比较给定的字符,但无法获得预期的输出 public String moveChar(String str, char c) { int len=str.length(); String newstr=""; int m=len-1; for (int i=0; i<len; i++) { char ch1=str.charAt(i); char ch2
public String moveChar(String str, char c) {
int len=str.length();
String newstr="";
int m=len-1;
for (int i=0; i<len; i++) {
char ch1=str.charAt(i);
char ch2=str.charAt(m);
if (ch1==c) {
newstr=newstr+ch2;
}
else {
newstr=newstr+ch1;
}
}
return newstr;
}
publicstringmovechar(stringstr,charc){
int len=str.length();
字符串newstr=“”;
int m=len-1;
对于(int i=0;i,不是移动给定的字符,而是删除它-用最后一个字符替换它
您应该计算需要移位的字符数,并在末尾移位:
public String moveChar(String str, char c) {
int len=str.length();
String newstr="";
int count=0;
for (int i=0; i<len; i++) {
char ch1=str.charAt(i);
if (ch1==c) {
count++;
} else { // append only the characters that don't require shifting
newstr=newstr+ch1;
}
}
for (int i = 0; i < count; i++) { // append the characters that require shifting
// at the end
newstr=newstr+c;
}
return newstr;
}
我建议您首先使用tocharray()
将字符串获取为char
数组,操纵数组,然后使用new string(charArray)
将其转换回字符串
您应该通过将所有非c
的字符复制到下一个位置来操作数组。当然,首先您要将字符复制到它们已经存在的位置,但这样做更简单。当没有要复制的字符时,您知道剩下的结果必须是所有c
字符
以下是一种简洁的方法:
public static String moveChar(String str, char c) {
char[] buf = str.toCharArray();
for (int i = 0, j = 0; j < buf.length; i++)
if (i >= buf.length)
buf[j++] = c; // fill
else if (buf[i] != c)
buf[j++] = buf[i]; // copy
return new String(buf);
}
另一种方法是创建与字符串长度相同的新空数组,如char[]temp=new char[word.length()]
,并根据字符是否等于所选字符从两侧填充
比如:
[iteration] -> [result array]
hello -> h???? // h != l
^ ^ // so we add it from left
i L
hello -> he??? // e != l
^ ^ // so we add it from left
i L
hello -> he??l // l == l
^ ^ // so we add it from right
i R
hello -> he?ll // l != l
^ ^ // so we add it from right
i R
hello -> heoll // o != l
^ ^ // so we add it from left
i L
完成后,您可以通过newstring(charArray)
将char[]
转换为sting
现在我不会给你代码,试着自己写
如果您无法编写,请查看以下提示:
您需要两个变量,分别表示字符应放置在的左
和右
索引,具体取决于它们是否与用户选择的字符相等
在将字符放置在它们所指向的索引后,不要忘记更新这些变量(向前或向后移动)
我无法理解您的策略。使用名为m
的变量也没有帮助。我的策略是:对于每个字符,如果不是给定的字符,则将其附加到字符串中。否则,增加一个计数器。完成后,将给定的字符附加到计数器的次数。您需要提供有关如何调用函数。例如,显示一个执行此操作的小主函数。我建议在char[]中执行此操作
取而代之。@Andreas这也是一个很好的解决方案。这是一个紧凑的解决方案,但我不确定它的可读性。@Eran我本不打算给OP写代码。起初,我留下了前两段文字的注释。但既然你写了代码,我想我应该写一个“更好的”(无论性能如何)解决方案,然后使其紧凑,以便OP必须考虑它,即,在无法解释其工作原理的情况下,不能按原样提交代码。@Zabuza不,谢谢。我的紧凑代码不使用不必要的大括号。通常人们在发布答案时倾向于遵循官方样式指南。我特别关心ode>,对于任何初学者来说,这可能会产生问题。@Zabuza您所指的官方风格指南是哪一个?
[iteration] -> [result array]
hello -> h???? // h != l
^ ^ // so we add it from left
i L
hello -> he??? // e != l
^ ^ // so we add it from left
i L
hello -> he??l // l == l
^ ^ // so we add it from right
i R
hello -> he?ll // l != l
^ ^ // so we add it from right
i R
hello -> heoll // o != l
^ ^ // so we add it from left
i L