2012-05-19 15 views
20

Próbuję usunąć określone słowo z określonego ciągu znaków za pomocą funkcji replace() lub replaceAll(), ale te usuwają wszystkie wystąpienia tego słowa, nawet jeśli jest częścią innego słowa!Usunięcie określonego słowa z ciągu znaków

Przykład:

String content = "is not like is, but mistakes are common"; 
content = content.replace("is", ""); 

wyjściowa:"not like , but mtakes are common"

pożądane wyjście:"not like , but mistakes are common"

Jak mogę zastąpić tylko całych słów z łańcucha?

+0

jeśli ma tag Java, oczywiście ** Jest to w języku Java ** –

+0

Czy należy użyć Zamień? Z ciągiem? Czy musisz szukać różnych ciągów znaków do zamiany i od? – UNECS

+0

powinieneś dodać, w której części całego łańcucha chcesz zastąpić, może możesz użyć wyrażenia regularnego do wykonania pracy –

Odpowiedz

36

Co do cholery,

String regex = "\\s*\\bis\\b\\s*"; 
content = content.replaceAll(regex, ""); 

pamiętać trzeba użyć replaceAll(...) używać wyrażeń regularnych, nie replace(...)

  • \\b daje wyraz granice
  • \\s* SPO biały miejsce po obu stronach usuwanego słowa (jeśli chcesz je usunąć).
+0

dziękuję bardzo, że to zrobili =) –

+1

@MiDoBasha: nie ma za co –

+0

Został jeszcze jeden problem. Jeśli sentencją był "pies to kot", ten kod usuwa przestrzeń z obu stron słowa "jest" i czyni go "psem". Myślę, że lepiej napisać 'content = content.replaceAll (regex," ")', a następnie przyciąć spacje na końcach – Jasir

0

Możesz spróbować zastąpić "is" przez "". Jest z spacją przed i jedną po, zastąpioną przez pojedynczą spację.

Aktualizacja:

Aby działać na pierwszy „jest” w zdaniu, również zrobić kolejny wymienić od „jest” na „”. Zastępując pierwszą i pierwszą spację pustym ciągiem.

+1

nie będzie działać dla pierwszego "jest" w zdaniu. –

+0

Ponieważ być może będziesz musiał obsłużyć tę sprawę specjalnie ze względu na wielką literę, być może zadziała wiele wywołań 'replaceAll()'? W tym 'replaceAll (" jest \. ",". ");' Lub somesuch, aby złapać ostatni ... –

+1

Oboje macie rację. Dziękuję Ci. Zaktualizowałem odpowiedź, aby uwzględnić tę sprawę. Jeśli ciąg kończyłby się na "jest", to również trzeba by było dodać ten przypadek, dodając do sumy równej 3. Ponadto, podobnie jak Rob dodał, duże litery powinny być rozważane w dodatkowych wywołaniach replaceAll. –

5

content = content.replaceAll("\\Wis\\W|^is\\W|\\Wis$", "");

+0

Czy nie potrzebujesz 'replaceAll (...)' not' replace (...) 'aby użyć magii wyrażeń regularnych? –

+0

@HovercraftFullOfEels Sorry nie testowałem. Edytowano po przetestowaniu. :) – Chip

Powiązane problemy