2016-01-23 1 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 (новый 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.