java - 字符替换(不使用替换)

标签 java

这段代码是一系列任务,第一个是将句子字符串中的所有“F”替换为“f”,而不使用.replace()方法。我已经完成了,然后我应该将所有的“f”替换为空白,我已经这样做了,但由于某种原因,我所有的大写“F”都变成了一个奇怪的正方形。有任何想法吗?我知道这是基本代码,但只是小步骤。

这是我奇怪的输出:“有一个名叫 []isher 的渔民在一个问题上 isher 或一些 ish;直到一个 ish 笑着把渔夫拉了进来。现在他们正在 ishing 或 []isher ”

谢谢!罗布。

public static void main(String[] args) {
    // orginal string sentence
    String sentence = ("There was a fisherman named Fisher who fished for some fish in a fissure; till a fish with a grin, pulled the fisherman in.  Now they’re fishing the fissure for Fisher. ");
    // data
    char[] originalArray = sentence.toCharArray();
    int i = 0;
    int sLength = sentence.length();
    int positionArray[];
    // combining an int to the array position
    positionArray = new int[sLength];
    /* while loop to check the position of any 'F' or 'f' characters in sentence and identifying it's array position*/
    while (i < sLength) {
        char charAt = sentence.charAt(i);
        if (charAt == 'F') {
            originalArray[i] = 0;
            positionArray[i] = 1;
        }
        i++;

    }
    //redeclaring int i to 0 for the new array
    i = 0;
    //reassigning the character 'F' or 'f' to just 'f to 'sentence'
    sentence = new String(originalArray);
    char[] newArray = sentence.toCharArray();
    while (i < sLength) {
        if (positionArray[i] == 1) {
            newArray[i] = 'f';
        }
        i++;
    //redeclaring int i to 0 for the (part e)
    i = 0;
    //removing every occurance of 'f' (part e)
    while (i < sLength) {
        if (newArray[i] == 'f'  ) {
            newArray[i] = ' ';
        }
        i++;
    //printing to console
    }
    sentence = new String(newArray);
    System.out.println(sentence);
}

}

最佳答案

这是一个使用 Java 8 的解决方案。它利用了 String 的事实。是 CharSequence ,并且您可以获得 IntStream其中的字符或代码点;该解决方案使用 chars :

// Turn all 'F's into 'f's
private int bigFToSmallF(final int inputChar)
{
    return 'F' == inputChar ? 'f' : inputChar;
}

// Turn all 'f's into '0's
private int smallFToZero(final int inputChar)
{
    return 'f' == inputChar ? '0' : inputChar;
}

private String anyFToZeroes(final String input)
{
    final StringBuilder sb = new StringBuilder(input.length());

    input.chars().map(this::bigFToSmallF).map(this::smallFToZero)
        .forEach(sb::appendCodePoint);

    return sb.toString();
}

将此代码插入到 main 中即可完成。

关于java - 字符替换(不使用替换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39121010/

相关文章:

java - 使用 .keystore 文件为 tomcat 8.5 配置 SSL - 无法存储非私钥

java - 没有 XML Spring ApplicationContext

java - Java 子字符串错误索引越界

java - 为 API 和 Angular 内容设置 spring 主机域作为主域

java - 如果我们发布代码中包含Javadoc的sources.jar,那么发布javadoc.jar不是重复的吗?

java - 为什么我必须重新定义数据结构两次?我是不是该?

java - 将我的Kotlin Maven发布代码转换为Java Gradle插件

java - 无法检索子项下的所有计数

java - JTable 删除行给出 ArrayOutofBounds 异常 -1

Java 多维数组。空指针