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

时间:2018-02-17 17:41:53

标签: java string char character stringbuilder

如果你不介意,请告诉我一些事情。我理解这段代码在很大程度上是做什么的,以及它如何大写字符串中的第一个字符。我不明白的是,在一段时间之后,当我阅读代码告诉我它已经资本化时,如何将词汇大写:#34;句点所在的位置(pos),而不是直接在它后面的字符,或者是空格,然后是字符(" this.example"或" this。example")。有人可以解释这段代码在这段时间之后如何将字符大写。如果需要,请使用"今天是。美好的一天"作为' 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++;
}

2 个答案:

答案 0 :(得分:2)

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

循环然后转到下一个字符,在那里它检查capitalize标志是true 字符是不是空白。如果是这种情况,则将字符大写并将标志重置为false。如果它是空格字符,则没有任何反应(capitalize标志在下一次迭代中保持true。)

答案 1 :(得分:-1)

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

public void setCharAt(int index, char ch),所以在这里你传递 &#34; pos&#34; 作为 &#34;索引&# 34; 的字符和 &#34; Character.toUpperCase(sb.charAt(pos))&#34; 作为字符