标题中的双“管”

问题描述:

在我今天的工作中,我意识到我们网页的标题有点小错误。我们的网站是使用.jsp页面和我们使用的产品页面的标​​题构建的标题中的双“管”

在我们的管理员(我们可以为每个产品设置标题)中,我们通常会添加*任何遇到的人这个问题之前,如果是这样,有没有人知道一种方法来解决我遇到的双管道问题?

+1

你能发布Strings.toTitleCase的代码吗? – beny23

+0

您是否确定添加双管道的位置?当你调试该行时,输入是否只有1个管道,输出是2? – cdeszaq

+0

@LouisStephens - “字符串”不是本地Java类型。 'String'(没有“s”是),但是没有'toTitleCase()'方法。这可能是一个提供“Strings”类的库。 – cdeszaq

问题是,该方法的replaceAll具有作为第一个参数的正则表达式。 “|”是正则表达式中的保留符号,如果要将其用作字符串文字,则必须将其转义。您可以创建解决方法,例如这种方法。

String[] words = str.split(" "); 
for (int i = 0; i < words.length; i++) { 
    if (words[i].length() > 0) { 
    if (!(words[i].substring(0, 1).equals("|"))) { 
     sb.append(words[i].replaceFirst(words[i].substring(0, 1), words[i].substring(0, 1).toUpperCase()) + " "); 
    } else { 
     sb.append(words[i] + " "); 
    } 
    } 
} 
+0

感谢Nightsorrow。我刚刚尝试了你的建议,但似乎实际上删除了|全部一起。 –

+0

哎。是的,你是对的,我忘了其他块。编辑。 – balent

尝试使用管道字符&brvbar;的html转义码。

您的标题是:

"Monkey Thank You &brvbar; Monkey Thank You Cards" 

我认为这个问题是这样一个事实:replaceFirst()需要一个正则表达式作为参数,并替换字符串。因为你的第一个字符推的是正则表达式的参数,与竖线发生的事情是(遗漏增加了StringBuffer)等价于:

String addedToBuffer = "|".replaceFirst("|", "|".toUpperCase()); 

会发生什么事的话,就是我们有匹配的正则表达式空字符串或空字符串。那么,任何字符串匹配空字符串正则表达式。所以比赛被替换为“|” (大写)。所以"|".replaceFirst("|", "|".toUpperCase())扩大到"||"。因此,append()调用的参数为"|| "

您可以修复有两种方式你的算法:

  1. 自动修复正则表达式,使用\Q\E之间的文字符号。所以你的正则表达式传递到replaceFirst()变成类似"\\Q"+ literal + "\\E"
  2. 意识到你不需要正则表达式。而是使用两个append()操作。一到append()转换后的案例第一个要添加的项目字符,另外要追加其余的。这看起来是这样的:

    for(String s:items){ if(s.equals(“”)){ sb.append(“”); } else { sb.append(Character.toUpperCase(s.charAt(0))); (s.length()> 1)sb.append(s.substring(1));(s.length()> 1)sb.append(s.substring(1)); } sb.append(“”); }}

第二种方法可能是更容易跟踪为好。

PS:出于某种原因,StackOverflow编辑器强烈反对列表中的代码块。如果有人碰巧知道如何解决冗长的格式化...?