2011-09-26 34 views
0

在我今天的工作中,我意識到我們網頁的標題有點小錯誤。我們的網站是使用.jsp頁面和我們使用的產品頁面的標​​題構建的標題中的雙「管」

在我們的管理員(我們可以爲每個產品設置標題)中,我們通常會添加*任何遇到的人這個問題之前,如果是這樣,有沒有人知道一種方法來解決我遇到的雙管道問題?

+1

你能發佈Strings.toTitleCase的代碼嗎? – beny23

+0

您是否確定添加雙管道的位置?當你調試該行時,輸入是否只有1個管道,輸出是2? – cdeszaq

+0

@LouisStephens - 「字符串」不是本地Java類型。 'String'(沒有「s」是),但是沒有'toTitleCase()'方法。這可能是一個提供「Strings」類的庫。 – cdeszaq

回答

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] + " "); 
    } 
    } 
} 
+0

感謝Nightsorrow。我剛剛嘗試了你的建議,但似乎實際上刪除了|全部一起。 –

+0

哎。是的,你是對的,我忘了其他塊。編輯。 – balent

0

嘗試使用管道字符&brvbar;的html轉義碼。

您的標題是:

"Monkey Thank You &brvbar; Monkey Thank You Cards" 
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(「」); } 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編輯器強烈反對列表中的代碼塊。如果有人碰巧知道如何解決冗長的格式化...?