在不带正则表达式的java中,将每n个字符替换为“-”

在不带正则表达式的java中,将每n个字符替换为“-”,java,Java,我试图用一些特殊字符替换字符串中的每一个第n个字符,例如,基于输入int n和string str的值,我想用这个特殊字符替换n处的所有字符,比如2,4,6,这样字符串的长度就得以保持,这就是我到目前为止得到的结果,但它不能产生正确的输出 public String everyNth(String str, int n) { String result=""; for(int i=0; i<str.length(); i+=n){ resul

我试图用一些特殊字符替换字符串中的每一个第n个字符,例如,基于输入int n和string str的值,我想用这个特殊字符替换n处的所有字符,比如2,4,6,这样字符串的长度就得以保持,这就是我到目前为止得到的结果,但它不能产生正确的输出

public String everyNth(String str, int n) {
      String result="";
      for(int i=0; i<str.length(); i+=n){
            result += " " + str.charAt(i);  
      } 
      return result;
}

您可以使用一个将用输入字符串初始化的字符串,然后使用来修改给定的字符,这样可以避免在每次迭代时生成一个新字符串,就像您当前对字符串上的运算符+=所做的那样

比如:

public String everyNth(String str, int n) {
    if (n < 1) {
        throw new IllegalArgumentException("n must be greater than 0");
    }
    StringBuilder result = new StringBuilder(str);
    // This will replace every nth character with '-'
    for (int i = n - 1; i < str.length(); i += n) {
        result.setCharAt(i, '-');
    }
    return result.toString();
}

首先,不能在Java字符串中替换。它们是不变的。因此,您必须创建一个具有正确属性的新字符串。有很多方法可以做到这一点,其中之一是迭代原始字符串并复制字符,除非当前索引是n的倍数。
您还可以将字符串转换为数组,在数组的每n个元素上循环并更改这些元素

您可以使用模数运算符%来实现您想要实现的目标,因此:

public String everyNth(String str, int n){
    StringBuilder sb = new StringBuilder();

    for(int i=0,n=str.length;i<n;i++){
        if(i%n==0){
            sb.append("-");
        else{
            sb.append(str.charAt(i);
        }
     }
     return sb.toString();
  }

你在代码中的什么地方替换了什么?模%操作符将是你最好的朋友。你的代码应该可以工作…为什么你不认为它产生了正确的结果?输入:测试,2个结果:t s。比我快。这可能是执行此任务最有效的方法,因为StringBuilder比串联多个Strings更有效。您可能希望让循环从i=n-1开始,除非您想从第一个字符开始替换,否则如何删除索引处的这些字符?-1。请阅读我提供的代码。我正在创建另一个新字符串来保存结果,因为我知道字符串是不可变的。
public String everyNth(String str, int n){
    StringBuilder sb = new StringBuilder();

    for(int i=0,n=str.length;i<n;i++){
        if(i%n==0){
            sb.append("-");
        else{
            sb.append(str.charAt(i);
        }
     }
     return sb.toString();
  }