我有一个春天的博客。在 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();}
添加回答
举报
0/150
提交
取消