getSentenceCaseText()
以句子大小写返回当前文本的字符串表示形式。句格是在句子中使用大写字母或只大写第一个词和任何专有名词的常规方式。此外,所有大写字都应保持原样。
对于这份作业,名词仅限于开头有一个大写字母的单词。
public String getSentenceCaseText(String text) {
int pos = 0;
boolean capitalize = true;
StringBuilder sb = new StringBuilder(text);
while (pos < sb.length()){
sb.setCharAt(pos, Character.toLowerCase(sb.charAt(pos)));
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++;
}
return sb.toString();
}
你发布的大多数逻辑都很好。问题是像“句子”这样的词,因为你用来检查大小写的逻辑是不正确的。
最大的问题是,您试图遍历单词,同时检查字符串是否大写。
最简单的方法是分离关注点;试着事先检查单词是否大写,并相应地采取行动。
public static boolean isUpper(String s, int start) {
for(int i = start; i < s.length(); i++) {
char c = s.charAt(i);
if(c == '.' || c == ' ')
return true;
if (!Character.isUpperCase(c))
return false;
}
return true;
}
boolean capitalize = isUpper(text, pos);
public static String getSentenceCaseText(String text) {
int pos = 0;
StringBuilder sb = new StringBuilder(text);
// Iterate over the string
while (pos < sb.length()){
// First check if the word is capitalized
boolean capitalize = isUpper(text, pos);
char c = sb.charAt(pos);
// Make the first letter capitalized for the cases that it was not
sb.setCharAt(pos, Character.toUpperCase(c));
pos++;
// Let us iterate over the word
// If it is not capitalized let us lower its characters
// otherwise just ignore and skip the characters
for (;pos < sb.length() && text.charAt(pos) != '.' && text.charAt(pos) != ' '; pos++)
if(!capitalize)
sb.setCharAt(pos, Character.toLowerCase(sb.charAt(pos)));
// Finally we need to skip all the spaces
for(; pos < sb.length() && text.charAt(pos) == ' '; pos++ );
}
return sb.toString();
}
使用此策略和此代码作为指导,在此基础上构建并实现您自己的方法。
将一个字符串的第一个字母(大写字母)变成小写。 使用数组解构和 String.toLowerCase() 将第一个字母变成小写,...rest 是获取第一个字母之后字符数组,然后使用 Array.join('') 使其再次拼接成为字符串。 省略 upperRest 参数来保持字符串的其余部分不变,或者将其设置为 true 来将字符串的其余部分转换为大写。 const decapitalize =
问题内容: 如何仅使用CSS将以下每个句子的大写字母转换为小写和首字母大写? 来自: 这是一个例句。 收件人: 这是一个例句。 更新: 当我使用文本转换时:大写;结果还是一样。 问题答案: CSS中没有句子大写选项。其他答案表明是不正确的,因为该选项将 每个单词 都大写。 如果您只希望 每个元素* 的 首字母 大写,则这是一种 粗略的 实现方式,但是与实际的句子大写绝对不符: *
我正在尝试使用正则表达式将大写字母替换为相应的小写字母。因此 变成 在Sublime的文本中。如何在同时包含小写和大写字母的单词中使用小写字母?所以它会影响维纳斯,而不是维纳斯。
问题内容: THIS IS SOMETEXT 我想使该段的首字母大写。 CSS可能吗? 编辑: 我所有的文本都用大写字母。 问题答案: 您可以使用以使段落的每个单词都大写,如下所示: 在 IE4 +中受支持。 这里的例子 。 [16.5大写:“文本转换”属性] 此属性控制元素文本的大写效果。 将每个单词的第一个字符大写;其他字符不受影响。 将每个单词都用大写字母大写: 在此假设下: 我想使它看起来
问题内容: 用MySQL的说法,有人知道这一TSQL的等效性吗? 我试图将每个条目的首字母大写。 问题答案: 几乎相同,您只需要更改即可使用CONCAT()函数而不是+运算符: 这会变成对,对,对等,如果你想为大写首字母和小写其他的,你只需要使用LCASE函数: 请注意,UPPER和UCASE做相同的事情。
目标是从string中获取新的字符串,该字符串没有大写前的小写。在本例中,我们应该得到输出“neyork” 我试图通过ASCII表中大小写字母的位置来实现这一点,但它不起作用。我不确定是否可以通过ASCII表中的位置,以simillar的方式来实现这一点。