标题中的双“管道”

时间:2011-09-26 14:37:25

标签: java

在我今天的工作中,我意识到我们网页标题中的一点错误。我们的网站使用.jsp页面构建,并使用我们使用的产品页面的标​​题

在我们的管理员中(我们可以为每个产品设置标题),我们通常会添加*之前遇到此问题的任何人,如果有的话,是否有人知道修复双管道的方法我遇到过的问题?

3 个答案:

答案 0 :(得分:1)

问题是方法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] + " ");
    }
  }
}

答案 1 :(得分:0)

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

你的头衔是:

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

答案 2 :(得分:0)

我认为问题在于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(“”);   }   其他{     sb.append(Character.toUpperCase(s.charAt(0)));     if(s.length()&gt; 1){       sb.append(s.substring(1));     }     sb.append(“”);   } }

  3. 第二种方法也可能更容易理解。

    PS:由于某种原因,StackOverflow编辑器强烈不同意列表中的代码块。如果有人碰巧知道如何修复munged格式......?