Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将markdown中每个单词的第一个字母大写,并用星号括起来。允许用星号表示多个单词_Java_Markdown - Fatal编程技术网

Java 将markdown中每个单词的第一个字母大写,并用星号括起来。允许用星号表示多个单词

Java 将markdown中每个单词的第一个字母大写,并用星号括起来。允许用星号表示多个单词,java,markdown,Java,Markdown,我有一个Spring博客。在Post模型中,我编写了一个方法,将Post标题中每个单词的第一个字母大写。这个很好用。但是,创建标题时的输入字段允许通过标记编辑器使用粗体和斜体选项,然后将单词用星号括起来。这就是问题所在 粗体或斜体字只要是唯一用星号括起来的字,就可以大写。但是,如果两个或多个单词方便地包装在一起,比如一本书或一部电影的标题在单词之间有空格,它就会中断并显示“java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:” 在if语句中,我

我有一个Spring博客。在Post模型中,我编写了一个方法,将Post标题中每个单词的第一个字母大写。这个很好用。但是,创建标题时的输入字段允许通过标记编辑器使用粗体和斜体选项,然后将单词用星号括起来。这就是问题所在

粗体或斜体字只要是唯一用星号括起来的字,就可以大写。但是,如果两个或多个单词方便地包装在一起,比如一本书或一部电影的标题在单词之间有空格,它就会中断并显示“java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:”

在if语句中,我尝试使用word.charAt(I)=''来检查是否有空格,但我似乎无法理解,因为有时它会将空格后的第二个单词大写,如“word-word”,但 第一个词被忽略了

我只是想把每个单词大写,这样

italics: *word word*
bold: **word word**
both: ***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();
}
公共字符串makeTitleUppercase(字符串标题){
StringBuffer sb=新的StringBuffer();
String[]句子=title.split(“”);
for(字符串:句子){
char[]字母=word.trim().toCharArray();
//每个单词(作品)的首字母大写:
字母[0]=字符.toUpperCase(字母[0]);
//大写粗体和斜体降价(问题):
for(int i=0;i
关注降价格式的细节会给自己带来一些麻烦。特别要注意的是,不管你是否已经成功地将第一个字母大写,你都要扫描每个单词的星号;当单词末尾出现一到三个星号时,会出现异常

您应该稍微概括一下您的角色化,这样格式就不会作为特例处理了。例如,您想要的规则可能是“在每个空格分隔的单词中,跳过任何星号,并将下一个字符(如果有)大写”。在标记化之后,可能如下所示:

        char[] letters = word.toCharArray(); // no need to trim()

        for (int i = 0; i < letters.length; i++) {
            if (letters[i] != '*') {
                // Capitalize the first non-asterisk (even if that doesn't change it)
                letters[i] = Character.toUpperCase(letters[i]);
                // No need to look any further
                break;
            }
        }
        // That's it for capitalizing!
char[]字母=word.tocharray();//不需要修剪()
for(int i=0;i

特殊情况会使你的推理复杂化。有时它们是无法避免的,但当您可以选择更一般的时候,通常是一场胜利。

对于初学者来说,代码有一些明显的错误。如果你在看字符串的最后一个字符(
for(inti=0;i
),当你做
word.charAt(i+1)
,还有
+2
?“考虑这些星号是否有必要”——我不确定这个问题的意思。如果您没有“解释”它们,您希望如何解释它们并执行所需的突出显示?@Jim Wait您了解代码、解释和示例是如何结合在一起的吗?整个规范都是乱七八糟的。@Voo不,这个问题很不清楚。@Jim,谢谢你的回答。对不起,我不清楚。从那以后,我就去掉了那一小块。我把太多的注意力放在星号上,而最好跳过它们。下面约翰的回答更好地表达了这一点。谢谢你的回答,约翰。我同样担心我会陷入麻烦,因为我太过关注降价的细节了。你建议的规则正是我想要表达的,谢谢你帮我澄清这一点。它工作得很好。我真的很感谢你的时间!我尝试过投票,但我没有足够的代表性来显示投票结果,但对于那些阅读这篇文章的人来说,这将是最好的答案。@RyanH,如果你对这个答案感到满意,那么作为问题的作者,你可以通过点击投票按钮附近的复选标记来“接受”它,而不管你是否可以或确实投票。