为了账号安全,请及时绑定邮箱和手机立即绑定

将字符串中每个单词的第一个字母大写,该字符串用 Markdown 中的星号包裹。

将字符串中每个单词的第一个字母大写,该字符串用 Markdown 中的星号包裹。

牧羊人nacy 2021-05-30 13:53:39
我有一个春天的博客。在 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();}
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信