2017-02-22 73 views

回答

5

您可以使用正則表達式。讓我們用

yourText = yourText.replaceAll("#(\\S+)", "$1"); 

在正則表達式的開始:

  • \S表示任何非空白字符
  • +表示一個或多個
  • \S+表示一個或多個非空白字符
  • (\S+) -parenthesis create group containsi納克的一個或多個非空白字符,該基團將在替換被索引爲1

  • 替換$1允許我們使用組1

的內容在其它它會嘗試找到#non-whitespaces(它將替換爲non-whitespaces部分。

但是這個解決方案並不需要#作爲單詞的開頭。要做到這一點,我們可以檢查是否#之前有

  • 空白空間\s,串^
  • 或啓動。

要測試是否在我們的元素之前沒有實際包含它在我們的匹配中,我們可以使用後視(?<=...)

因此,我們的最終解決方案可以像

yourText = yourText.replaceAll("(?<=^|\\s)#(\\S+)", "$1"); 
+1

完美工作。謝謝。 –

+1

@IsurangaPerera我更新了這個答案來解決一個問題。檢查更新的版本。 – Pshemo

0

是,String.replaceAll()

String foo = "#user" 
foo = foo.replaceAll("#", ""); 
+2

這將刪除所有'#',無論它們在哪裏。 – Pshemo

+1

@IsurangaPerera'替換'也會替換搜索到的所有*文本。 'replace'和'replaceAll'之間的區別在於'replaceAll'使用正則表達式語法,而'replace'則使用文字。 – Pshemo

+0

@Pshemo謝謝你完全忘記了 –

0

您還沒有很明確的使用情況,但我的代碼示例假設:

  1. 省略所有與的replaceAll函數符號
  2. 忽略第一個符號與子串函數

    公共類TestRegex {

    public static void main(String[] args) { 
    
        String omitInStart = "#user"; 
        String omitInMiddle = "#user"; 
        String omitInEnd = "#user"; 
        String omitFewSymbols = "#us#er"; 
    
        List<String> listForOmit = Arrays.asList(omitInStart, omitInMiddle, omitInEnd, omitFewSymbols); 
        listForOmit.forEach(e -> System.out.println(omitWithReplace(e))); 
    
        listForOmit.forEach(e -> System.out.println(omitFirstSymbol(e))); 
    
    } 
    
    private static String omitFirstSymbol(String stringForOmit) { 
        return stringForOmit.substring(1); 
    } 
    
    private static String omitWithReplace(String stringForOmit) { 
        String symbolForOmit = "#"; 
        return stringForOmit.replaceAll(symbolForOmit, ""); 
    } 
    

    }