2016-01-23 230 views
-2

我想用給定的字符串中的多個字符替換一個空格。用單個空格替換字符串中的多個字符

如:He is a very very good boy, isn't he? 應及時更換,

He 
is 
a 
very 
very 
good 
boy 
isn 
t 
he 

我的代碼是

String str = "He is a very very good boy, isn't he?" 
String str2 = str.replaceAll("![,?.\_'@+] +"," "); 
String []tokens = str2.split(" +"); 

for(int i = 0; i< tokens.length; i++) 
     System.out.println(tokens[i]); 

但輸出

He 
is 
a 
very 
very 
good 
boy, 
isn't 
he? 

請糾正我的代碼,如果可能的話還是建議新一。

+0

如果您試圖將文本分成單詞,那麼您不應該將''不是''分成''isn「」t「'。撇號是這個詞的一部分。 –

回答

0

我嘗試了所有上述,但這一個工作。

BufferedReader br = new BufferedReader(new InputStreamReader(System。在));

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
String S = br.readLine(); 
List<String> splitted = new ArrayList<>(Arrays.asList(S.split("[ :#$%^&/<>{}*|;_()!,?.'@+\\\\\\[\\]\\\"]+"))); 
splitted.removeAll(Arrays.asList(null,"")); 
System.out.println(splitted.size()); 
for (String word: splitted) System.out.println(word); 

這是我發佈的整個問題的解決方案。

2

這裏是一個偉大的文章:Replace All Method

如果你只想在你的字符串字母,並取代一切有空間,這裏是語句:

str2 = str.replaceAll("[^a-zA-z]", " "); 

如果你想更換你提到的(不含括號)的字符,請使用:如果你要包括括號

s1 = s1.replaceAll("[^[!,?._'@+]]", " "); 

,使用此:

s1 = s1.replaceAll("[^[!,?._'@+\\[\\]]]", " "); 

希望這有助於!

+0

空格或任何特殊字符,如![,?。\ _'@ +]將作爲分隔符。休息所有字符都是允許的。 – ra1vi2

+0

你想排除[]括號嗎? – Spencer4134

+0

使用s1 = s1.replaceAll(「[^ [!,?._'@ +]]」,「」);將刪除括號內的字符,並且s1 = s1.replaceAll(「[^ [!,?._'@ + \\\ [\\\]]]]」,「」);也會刪除方括號。 – Spencer4134

0

如果你想只用字母來代替,然後

String x = sequence.replaceAll("[^a-zA-Z] +"," "); 

,並用字母和數字

String y = sequence.replaceAll("[^a-zA-Z0-9] +"," "); 

看一看Replace()ReplaceAll()方法

+0

空格或任何特殊字符,如![,?。\ _'@ +]將作爲分隔符。休息所有字符都是允許的。 – ra1vi2

1

首先,我想你的正則表達式缺少一個轉義。我想你想在你的表達中加入反斜槓\,但你必須像這樣逃避它:\\

此外,正則表達式"![,?.\_'@+] +"表示要替換一個感嘆號!的組合,它是一個包含,?.\_'@+集合的一部分的任何字符,和一個或多個空間(+)。

正則表達式[,'?]+應該完成這項工作。你可以閱讀更多關於如何在Regular expressions形成正確的表達。

相關問題