此 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++;
}
这段代码是一种粗略的状态机。只有 if
或 else 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))
" 作为字符
如果你不介意的话,你能不能给我解释一下。我了解这段代码的大部分作用,以及它如何将字符串中的第一个字符大写。我不明白的是句号后的单词是如何大写的,当我阅读代码时它告诉我它 "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++;
}
这段代码是一种粗略的状态机。只有 if
或 else 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))
" 作为字符