如果你不介意,请告诉我一些事情。我理解这段代码在很大程度上是做什么的,以及它如何大写字符串中的第一个字符。我不明白的是,在一段时间之后,当我阅读代码告诉我它已经资本化时,如何将词汇大写:#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++;
}
答案 0 :(得分:2)
此代码是一种粗略的状态机。在循环的每次迭代中仅执行if
或else 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; 作为字符