2016-01-23 211 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形成正确的表达。

相关问题