我想用一个空格替换给定字符串中的多个字符。
例如: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 :(得分: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] +"," ");
答案 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);
这是我发布的整个问题的解决方案。