2013-04-02 43 views
4

我想使用模式匹配從Java中的字符串中消除所有單個字母單詞。我編碼如下:使用java模式匹配去除單個字母單詞

String str = "[email protected]"; 

    //remove single char words and extra white spaces 
    inputStr = inputStr.replaceAll("\\b[\\w']{1}\\b", "").replaceAll("\\s+", " ").trim(); 

我期待輸出爲P @,因爲輸入不是單個字母的單詞。但我得到的輸出爲@因爲它消除了P.所以基本上它只考慮匹配模式的字母字符。而我想根據輸入字符串的長度進行匹配。

請幫忙。

+0

問題似乎是'\ b',它不會將@作爲字母計數。 – brimborium

回答

0

使用此

str = str.replaceAll("(^.$|\\s.\\s|^.\\s|\\s.$)", "").replaceAll("\\s+", " ").trim(); 

與解決方案的問題是,你使用\b這是在年底字開始期待一個字符所以它不是你的情況的工作。

/b

匹配詞字符(任何由\ W匹配的)和非字字符(任何由[^ \ w]或\ W匹配的),以及在開始和之間的位置/或字符串的結尾,如果字符串中的第一個和/或最後一個字符是單詞字符。

REFER FOR REGULAR EXPRESSION

+0

這不是一個完整的解決方案。它僅適用於上述示例的解決方案。因爲如果我將字符串更改爲「P」,這將保持原樣。但正如我所說,我想消除單個字母的單詞。 – paras2682

+0

此解決方案不考慮不包含在空格中的單詞。 (例如字符串的開始/結尾處的單詞,或者以逗號或句點結尾的單詞)。 – brimborium

+0

@brimborium OP提到他需要考慮字符串的實際長度,包括其他字符。 – Meherzad

2

嘗試使用這樣的:

 String data = "asd df R# $R $$ $ 435 4ee 4"; 

    String replaceAll = data.replaceAll("(\\s.\\s)|(\\s.$)", " "); 
    System.out.println(replaceAll); 

輸出是:asd df R# $R $$ 435 4ee

0

試試這個正則表達式:

\s([^\s]{1})\s 

應該抓住單個字符非空白,通過分隔兩邊都有空白。如果您需要接受非空白字符(如','和'。')。作爲分隔符,您需要添加這些分隔符。

0

測試用例是:

ASD DF R·$ R $ $$ 435 4EE 4哎哥們這是一個測試I @想

"[!-~]?\\b[A-z]\\b[!-~]?" 
"[!-~]?\\b[\\w]\\b[!-~]?" 

輸出上面的代碼是:

ASD DF $$ $ 435 4EE 4嘿,夥計,這是測試想
ASD DF $$ $ 435 4EE嘿,夥計日是測試通緝

注意,在第二個失蹤的四個。第二個正則表達式排除數字不知道是否計算單個數字

相關問題