2016-07-04 38 views
1

我需要的是逃避一個字符串中的每個單詞,並逃避每個特殊字符,如:!,?._'@。我已經試過是這樣的:如何從字符串中跳出 s(空格字符)?

public class Solution 
{ 
    public static void main(String[] args) 
    {  
     Scanner scan = new Scanner(System.in); 
     Pattern pat = Pattern.compile("[!|,|?|.|_|'|@]"); 
     String a = scan.nextLine(); 
     scan.close(); 
     String[] part = pat.split(a); 
     System.out.println(part.length); 
     for(String p: part) 
      System.out.println(p); 
    } 
} 

雖然這確實逃避特殊字符,我不能設法找到一種方法,有正則表達式匹配的每個單詞之間的空格。 另外,我試過在正則表達式之後使用\s\\s

對於輸入像:The dog is a very lazy dog, isn't he?
輸出應爲:

The 
dog 
is 
a 
very 
lazy 
dog 
isn 
t 
he 

回答

2

[..]character class其描述了用於單個字符範圍,而不是兩個字符(我們可以允許像+*{nim,max}但與量詞字符的重複在這裏不是這種情況)。

你也不需要使用|裏面[..],因爲它是簡單的字符,而不是OR運算符。所以[a|b]並不意味着a OR b,它代表字符a|b(所以像|c|任何重複將代表另一|c)。

基於例如你提供,你可能會尋找:

Pattern pat = Pattern.compile("[!,?._'@\\s]+"); 

或因爲這可能是更具可讀性

Pattern pat = Pattern.compile("([!,?._'@]|\\s)+"); 

您可能需要使用運營商之外的[..]OR|\s作爲"\\s因爲\也是字符串文字中的特殊字符(它可以用於例如創建制表符\t),所以它需要逃脫。

我用(..)包裹了整個表達式來創建可代表所有分隔符的組。這允許我使用+(量詞表示「一個或多個事件」),所以現在你的正則表達式可以看到,.作爲單獨的分隔符,這將確保一個分割整個表達式的幾個連續的分隔符,而不是分別分開每個分隔符。所以,而不是"a,.b" - >["a, "", "b"]現在我們將得到["a", "b"]

+0

我認爲你是對的「|」字符。但是這仍然不能逃避字符串中的每個空間。 –

+0

「逃避串中的每個空間」是什麼意思?你能否更新你的問題併發布你的意見和預期結果? – Pshemo

+0

@MinaF讓我知道編輯過的版本是否適合你。如果確實會嘗試添加解釋。 – Pshemo

相關問題