这个Java代码中发生了什么?

这个Java代码中发生了什么?,java,string,char,character,stringbuilder,Java,String,Char,Character,Stringbuilder,如果你不介意的话,你能给我解释一下吗。我了解这段代码的大部分功能,以及它如何将字符串中的第一个字符大写。我不明白的是,is如何在句点后大写单词,当我阅读代码时,它告诉我它“大写”句点所在的位置(pos),而不是直接在它后面的字符或空格,然后是字符(“this.example”或“this.example”)。有人能解释一下这段代码是如何在句号后大写字符的吗。如有需要,请使用“今天是个好日子”作为“用户输入” int pos = 0; boolean capitalize = true; Stri

如果你不介意的话,你能给我解释一下吗。我了解这段代码的大部分功能,以及它如何将字符串中的第一个字符大写。我不明白的是,is如何在句点后大写单词,当我阅读代码时,它告诉我它“大写”句点所在的位置(pos),而不是直接在它后面的字符或空格,然后是字符(“this.example”或“this.example”)。有人能解释一下这段代码是如何在句号后大写字符的吗。如有需要,请使用“今天是个好日子”作为“用户输入”

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++;
}
int pos=0;
布尔大写=真;
StringBuilder sb=新的StringBuilder(用户输入);
while(pos
此代码是一种粗糙的状态机。在循环的每次迭代中只执行
if
else if
块(或两者都不执行)。如果当前字符是
,则
大写
标志设置为
,并且在该迭代中不会发生任何其他情况。此标志告诉代码将看到的下一个非空格字符大写


然后,循环会将您带到下一个字符,检查
大写
标志是否为
,字符是否为空白。如果是这种情况,字符将大写,标志将重置为
false
。如果它是一个空格字符,则什么也不会发生(在下一次迭代中,
大写
标志保持为

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


public void setCharAt(int-index,char-ch)
,因此这里您将“pos”作为字符的“index”传递,而
作为字符的
作为旁白,与
while
循环相比,此代码更适合
for
循环。很可能我们正在为此人进行编码测试,作为作业的一部分或面试过程的一部分。这不涉及排序、测试或作业,我只是想更好地理解java,而且我的语言知识也提高了。非常感谢!我无法告诉您我花了多少时间来查看并大声读出我认为代码将在其中执行以尝试理解它的过程。你帮了我很大的忙!