簡體   English   中英

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

[英]Changing every 5th character in a String 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;
}

您的代碼更改:

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

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;
}

一個簡單的循環就可以完成工作。 注意索引並避免復雜的計算。

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);

您可以嘗試此代碼。

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();
 }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM