我有一个春天的博客。在 Post 模型中,我编写了一个方法,将 Post 标题中每个单词的第一个字母大写。这工作正常。但是,创建标题时的输入字段允许通过 Markdown 编辑器使用粗体和斜体选项,然后将单词包裹在星号中。这就是问题出现的地方。
只要粗体或斜体字是唯一用星号包裹的字,就会大写。但是,如果两个或多个单词方便地包装在一起,例如单词之间有空格的书或电影标题,它会中断并显示“java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:”
在 if 语句中,我尝试使用 word.charAt(i) == ' ' 来检查是否有空格,但我似乎无法弄清楚,因为有时它会将空格后的第二个单词大写,例如“word Word”但是第一个单词被忽略了。
我只是想大写每个单词,以便
italics: *word word*
bold: **word word**
both: ***word word***
分别返回Word Word、Word Word或两者。
这甚至是一个好方法吗?任何帮助是极大的赞赏!先感谢您。
public String makeTitleUppercase(String title) {
StringBuffer sb = new StringBuffer();
String[] sentence = title.split(" ");
for (String word : sentence) {
char[] letters = word.trim().toCharArray();
//Capitalize each first letter of each word (works):
letters[0] = Character.toUpperCase(letters[0]);
//Capitalizing bold and italicized markdown (issues):
for (int i = 0; i < letters.length; i++) {
//word.charAt(i) == ' ' where???
// *italics*:
if (word.charAt(i) == '*') {
letters[1] = Character.toUpperCase(letters[1]);
//**bold**:
if (word.charAt(i + 1) == '*') {
letters[2] = Character.toUpperCase(letters[2]);
}
//***both***
if (word.charAt(i + 2) == '*') {
letters[3] = Character.toUpperCase(letters[3]);
}
break;
}
}
word = new String(letters);
sb.append(word).append(" ");
System.out.println("get here");
}
return sb.toString().trim();
}
相关分类