如何在不使用replace()的情况下将字符替换为另一个字符

时间:2014-12-07 22:03:19

标签: java

我不允许使用replace()。我可以使用的是substring和indexOf以及length()。如何使用这些方法替换字符?这是我尝试过的,但它不起作用。

public static String replace(String s)
{
  int b = 0;
  String result = "";
  int index = s.indexOf(' ');

  while(index != -1)
  {
     result += s.substring(b,index) + '\n';
     s = s.substring(index+1);
     index = s.indexOf(' ');
  }

  return result;
}   

***更正:我拿出了b = index;因为我意识到这是一个错误。现在它解决了字符串的最后一个字符没有显示的唯一问题,因为部分`str.indexOf('');是-1,不符合循环条件。

4 个答案:

答案 0 :(得分:0)

您需要将之前的index存储在b中。此外,您可以使用indexOf()的第二个参数来控制String中的位置。像,

public static String replace(String s) {
    int b = 0;
    String result = "";
    int index = s.indexOf(' ');
    if (index > -1) {
        while (index != -1) {
            result += s.substring(b, index) + '\n';
            // s = s.substring(index + 1);
            b = index;
            index = s.indexOf(' ', index + 1);
        }
        result += s.substring(b + 1);
    } else {
        result = s;
    }
    return result;
}

答案 1 :(得分:0)

你可以在没有indexOf和substring的情况下完成。
实现来自java.lang.String.replace()。

public static String replace(String str, char oldChar, char newChar) {
    if (oldChar != newChar) {
        char[] value = str.toCharArray();
        int len = value.length;
        int i = -1;
        char[] val = value;

        while (++i < len) {
            if (val[i] == oldChar) {
                break;
            }
        }
        if (i < len) {
            char buf[] = new char[len];
            for (int j = 0; j < i; j++) {
                buf[j] = val[j];
            }
            while (i < len) {
                char c = val[i];
                buf[i] = (c == oldChar) ? newChar : c;
                i++;
            }
            return new String(buf);
        }
    }
    return str;
}

答案 2 :(得分:0)

你可以这样做,除非你必须使用你提到的所有方法。无论如何,可能是值得深思的。

  public static String replace(String s) {
    String[] split = s.split("");
    String result = "";
    for (int i = 0; i < split.length; i++) {
      if (split[i].equals(" ")) {
        split[i] = "\n";
      }
      result+=split[i];
    }


    return result;
  }

答案 3 :(得分:0)

您还可以使用递归方法解决该任务:

public static void main(String[] args) {
    System.out.println(replace("a b c ..."));
}

public static String replace(final String str) {
    final int index = str.indexOf(' '); // find the first occurence
    if (index == - 1) { // if there are no whitespaces ...
        return str; // ... then return the unchanged String
    }
    // cut off the part before the whitespace, append \n to it and then append
    // the result of another "replace" call with the part after the found whitespace
    return String.format("%s%s%s",
        str.substring(0, index), "\n", replace(str.substring(index + 1)));
}

代码中的注释应描述递归方法的行为。如果您对此有疑问,请发表评论。