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

我有一个春天的博客。在 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();

}


牧羊人nacy
浏览 191回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java