在我今天的工作中,我意識到我們網頁的標題有點小錯誤。我們的網站是使用.jsp頁面和我們使用的產品頁面的標題構建的標題中的雙「管」
在我們的管理員(我們可以爲每個產品設置標題)中,我們通常會添加*任何遇到的人這個問題之前,如果是這樣,有沒有人知道一種方法來解決我遇到的雙管道問題?
在我今天的工作中,我意識到我們網頁的標題有點小錯誤。我們的網站是使用.jsp頁面和我們使用的產品頁面的標題構建的標題中的雙「管」
在我們的管理員(我們可以爲每個產品設置標題)中,我們通常會添加*任何遇到的人這個問題之前,如果是這樣,有沒有人知道一種方法來解決我遇到的雙管道問題?
問題是,該方法的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] + " ");
}
}
}
感謝Nightsorrow。我剛剛嘗試了你的建議,但似乎實際上刪除了|全部一起。 –
哎。是的,你是對的,我忘了其他塊。編輯。 – balent
嘗試使用管道字符¦
的html轉義碼。
您的標題是:
"Monkey Thank You ¦ Monkey Thank You Cards"
我認爲這個問題是這樣一個事實:replaceFirst()
需要一個正則表達式作爲參數,並替換字符串。因爲你的第一個字符推的是正則表達式的參數,與豎線發生的事情是(遺漏增加了StringBuffer
)等價於:
String addedToBuffer = "|".replaceFirst("|", "|".toUpperCase());
會發生什麼事的話,就是我們有匹配的正則表達式空字符串或空字符串。那麼,任何字符串匹配空字符串正則表達式。所以比賽被替換爲「|」 (大寫)。所以"|".replaceFirst("|", "|".toUpperCase())
擴大到"||"
。因此,append()
調用的參數爲"|| "
。
您可以修復有兩種方式你的算法:
\Q
和\E
之間的文字符號。所以你的正則表達式傳遞到replaceFirst()
變成類似"\\Q"+ literal + "\\E"
。意識到你不需要正則表達式。而是使用兩個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編輯器強烈反對列表中的代碼塊。如果有人碰巧知道如何解決冗長的格式化...?
你能發佈Strings.toTitleCase的代碼嗎? – beny23
您是否確定添加雙管道的位置?當你調試該行時,輸入是否只有1個管道,輸出是2? – cdeszaq
@LouisStephens - 「字符串」不是本地Java類型。 'String'(沒有「s」是),但是沒有'toTitleCase()'方法。這可能是一個提供「Strings」類的庫。 – cdeszaq