更改String Java中的每个第5个字符

时间:2019-07-16 12:42:57

标签: java

我正在尝试获取一个函数以获取String并将每第5个字符更改为'z'。不管出于何种原因,第一个更改的字符始终是第六个字符,我不知道为什么。如果字符串可以被5整除,也会出现错误,这是因为它从第6个字符开始,或者因为我的循环迭代距离太远了。

我搞砸了循环迭代,但看不到为什么它从第6个字符开始。

public static String change5thPosition(String s) {
    int fives = (int) Math.floor((s.length() / 5));
    System.out.println(fives);
    char[] chars = s.toCharArray();
    for (int i = 0; i <= fives; i++) {
        if (i != 0)
            chars[i * 5] = 'z';
    }

    String returnString = new String(chars);
    return returnString;
}

输入示例:

  

所有喜怒无常的都是小树林

预期输出:

  

所有zimsyzwerezthe zbragzoves

实际输出:

  

所有mzmsy zere zhe bzragrzves

编辑:感谢您的帮助。这是我更新的代码:

public static String change5thPosition(String s) {
    char[] chars = s.toCharArray();
    for (int i = 4; i < s.length(); i = i + 5) {
        chars[i] = 'z';
    }

    String returnString = new String(chars);
    return returnString;
}

4 个答案:

答案 0 :(得分:4)

您的代码更改:

i=1 : chars[1 * 5 = 5]
i=2 : chars[2 * 5 = 10]
... and so on.

但是由于数组的索引从0开始,所以您实际上要更改4,9,14, ...处的字符。

所以只需减去1。

chars[i*5 - 1] = 'z';

这些“一对一”错误在编程中很常见,您将学到预期的错误。

在旁注中,不需要:

for(int i=0; i<=fives; i++){
    if (i!=0)  {
       ...
    }
}

...当您可以从i开始于1:

for(int i=1; i<=fives; i++){
    ...
}

您还可以避免因乘以五而得的乘法:

for(int i=4, i < chars.length; i += 5) {
   char[i] = 'z';
}

答案 1 :(得分:0)

只需在索引中添加 -1

public static String change5thPosition(String s){
    int fives = (int)Math.floor((s.length()/5));
    System.out.println(fives);
    char[] chars = s.toCharArray();
    for(int i=0; i<=fives; i++){
        if (i!=0)
        chars[i*5 -1]='z';
    }
    String returnString = new String(chars);

    return returnString;
}

答案 2 :(得分:0)

一个简单的循环就可以完成工作。注意索引并避免复杂的计算。

String n = "all mimsy were the baragroves";
    char[] s = n.toCharArray();
    for(int i = 4;i<s.length;i+=5){
        s[i]='z';
    }
    System.out.println(s);

答案 3 :(得分:0)

您可以尝试使用此代码。

public class Simple {
 public static void main(String args[]) {
  System.out.println(change5thPosition("all mimsy were the baragroves"));
 }
 public static String change5thPosition(String s) {
  int fives = (int) Math.floor((s.length() / 5));
  System.out.println(fives);
  char[] chars = s.toCharArray();
  int index = 1;
  StringBuilder myvar = new StringBuilder();

  for (int i = 0; i < s.length(); i++) {
   char c = s.charAt(i);
   if (index == 5) {
    myvar.append("z");
    index = 1;
   } else {
    myvar.append(c);
    index++;
   }
  }
  return myvar.toString();
 }

}