此 Java 代码中发生了什么?

What is Happening in This Java Code?

如果你不介意的话,你能不能给我解释一下。我了解这段代码的大部分作用,以及它如何将字符串中的第一个字符大写。我不明白的是句号后的单词是如何大写的,当我阅读代码时它告诉我它 "capitalizes" 句号所在的位置(pos),而不是紧随其后的字符或空格然后是一个字符("this.example" 或 "this. example")。有人能解释一下这段代码是如何在句点后将字符大写的吗?如果需要,请使用 "today is. a good day" 作为输入 'userInput'。

int pos = 0;
boolean capitalize = true;
StringBuilder sb = new StringBuilder(userInput);

while (pos < sb.length()) {

    if (sb.charAt(pos) == '.') {

        capitalize = true;
    } 
    else if (capitalize && !Character.isWhitespace(sb.charAt(pos))) {

        sb.setCharAt(pos, Character.toUpperCase(sb.charAt(pos)));

        capitalize = false;
    }
    pos++;
}

这段代码是一种粗略的状态机。只有 ifelse if 块(或两者都不)将在循环的每次迭代中执行。如果当前字符是 .,则 capitalize 标志将设置为 true,并且在该迭代中不会发生任何其他事情。此标志告诉您的代码将其看到的下一个 non-space 字符大写。

循环然后带你到下一个字符,在那里它检查 capitalize 标志是否是 true 字符不是白色space。如果是这种情况,字符将大写并且标志将重置为 false。如果它是一个 space 字符,则什么也不会发生(capitalize 标志在下一次迭代中保持 true)。

如果您查看方法 setCharAt(),它采用下面提到的两个参数并用于在指定索引处设置指定字符:-

public void setCharAt(int index, char ch),所以在这里你将 "pos" 作为 "index" 字符和 "Character.toUpperCase(sb.charAt(pos))" 作为字符