仅使用循环替换字符串中字符的所有实例

时间:2017-03-01 16:06:41

标签: java string loops

因为标题表明我有一个功课问题,我无法解决问题。仅使用基本的字符串方法(length,charAt,substring,equals,equalsIgnoreCase)和循环,我必须替换用户输入的字符串中的所有字符实例,并使用用户想要的新字符打印新字符串来代替旧。我不确定如何在不使用indexOf的情况下找到并存储字符串字符的所有实例。这是我编写的一些基本代码,我们将不胜感激。我不知道如何仅使用这些基本的字符串方法替换字符的所有实例。

COMPUTE #hh = NUMBER(CHAR.SUBSTR(Timestamp_1,TS+1,2),F2).
COMPUTE #mm = NUMBER(CHAR.SUBSTR(Timestamp_1,TS+3,2),F2).
COMPUTE #ss = NUMBER(CHAR.SUBSTR(Timestamp_1,TS+6,2),F2).

COMPUTE time = TIME.HMS(#hh,#mm,#ss).
EXECUTE.

FORMATS time (TIME8).

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。您可以将String转换为characters - String#toCharArray的数组。然后你需要迭代数组并用新值替换char。

char[] chars = "lorem ipsum sit amet".toCharArray();
char newValue = 'X';
for (int i = 0; i < chars.length; i++) {
      if (chars[i] == 'm') {
          chars[i] = newValue;
      }
}
System.out.println(new String (chars)); // loreX ipsuX sit aXet

您可能希望将StringBuilder用于类似解决方案:

StringBuilder builder = new StringBuilder("lorem ipsum sit amet");
char newValue = 'X';
for (int i = 0; i < builder.length(); i++) {
    if (builder.charAt(i) == 'm') {
        builder.setCharAt(i, newValue);
    }
}
System.out.println(builder); // loreX ipsuX sit aXet

您甚至可以使用stream API:

String newString = "lorem ipsum sit amet".chars().map(el -> {
    if ((char) el == 'm') {
        return 'X';
    } else {
        return el;
    }
}).collect(StringBuilder::new,
        StringBuilder::appendCodePoint, StringBuilder::append)
        .toString();
System.out.println(newString); // loreX ipsuX sit aXet