用单个空格替换String中的多个char

时间:2016-01-23 23:32:35

标签: java string replaceall

我想用一个空格替换给定字符串中的多个字符。

例如: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?

如果可能,请更正我的代码或建议新代码。

4 个答案:

答案 0 :(得分:2)

这是一篇很棒的文章:Replace All Method

如果你想在你的字符串中只有字母,并用空格替换其他所有字母,这里是声明:

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

如果要替换您提到的字符(括号不包括),请使用:

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

如果要包括括号,请使用:

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

希望这有帮助!

答案 1 :(得分:1)

首先,我认为你的正则表达式错过了逃避。我想你想在你的表达式中包含反斜杠\,但你必须像这样逃避:\\

此外,您的正则表达式"![,?.\_'@+] +"表示您要替换感叹号!的组合,即包含,?的集合中的任何字符。 },.\_'@+,以及一个或多个空格(+ )通过一个空间。

正则表达式[,'?]+应该完成这项工作。您可以在Regular expressions了解有关如何形成正确表达式的更多信息。

答案 2 :(得分:0)

如果您只想用字母替换

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

以及字母和数字

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

查看Replace()ReplaceAll()方法

答案 3 :(得分:0)

我尝试了以上所有但是这个有用了。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

 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);

这是我发布的整个问题的解决方案。