java - 这段 Java 代码发生了什么?

标签 java string char character stringbuilder

如果你不介意的话,可以给我解释一下吗?我了解这段代码的大部分功能,以及它如何将字符串中的第一个字符大写。我不明白的是如何在句点之后将单词大写,当我阅读代码时,它告诉我它“大写”句点所在的位置(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 block (或两者都不执行)将在循环的每次迭代中执行。如果当前字符是 .,则将 capitalize 标志设置为 true 并且在该迭代中不会发生任何其他情况。该标志告诉您的代码将它看到的下一个非空格字符大写。

然后循环将您带到下一个字符,在其中检查大写标志是否为true以及该字符不是空白。如果是这种情况,则字符将大写,并且标志将重置为 false。如果它是空格字符,则不会发生任何事情(capitalize 标志在下一次迭代中保持 true)。

关于java - 这段 Java 代码发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48844104/

相关文章:

连接字符串 (2)

java - 母牛和公牛游戏

java - 如何从android中的非Activity类调用服务方法

java - 在catch block 中处理异常?

java - System.currentTimeMillis() 的巨大差异

python - 如何在Python格式函数中应用 "%.02f"?

java - Java 中的八进制到文本

javascript - 提取字符串 JavaScript 的非常具体的部分

c++ - 为什么将内存分配给 char 指针不会截断 char 序列

c - 在 C 中打印控制字符的图形表示