Vervanging/toevoeging van meerdere substrings op specifieke locaties in een string met behulp van Java

Ik heb geen oplossing gevonden voor een specifiek probleem dat ik ondervind. Ik ben bezig met XML-parsing waarin ik woorden binnen een string zou willen manipuleren.

Als ik een geval heb van: 'word, word word word' - woorden kunnen elke tekenreeks zijn, omdat ik niet weet wat ze van tevoren zouden zijn.

Ik zou de reeks willen kunnen manipuleren om het volgende resultaat te verkrijgen: 'word., Word word. woord ' - Dus, het eerste woord en het derde woord zou ik een '. ' willen toevoegen aan het einde ervan.

Wat zou hiervoor een geschikte aanpak zijn? Zou regex de beste manier zijn?

0
Het klinkt alsof je een goed idee hebt hoe je dit al moet doen. Verklaart u eenvoudigweg een mening over of regexes op een of andere manier "beter" zijn dan ingebouwde string-methoden, of dat de ene efficiënter is dan de andere? Zoals het is, ben ik geneigd te zeggen, wat voor jou ook werkt. Regexes en strings zullen het werk doen met weinig hoofdpijn.
toegevoegd de auteur Sanjamal, de bron

2 antwoord

Ervan uitgaande dat woorden worden gescheiden met behulp van hetzelfde teken (s), denk ik dat de eenvoudigste manier is om indexOf ("") te gebruiken en vervolgens subtekenreeks te gebruiken om toe te voegen een punt voor de geretourneerde index. Vergeet niet dat u ook lastIndexOf ("") kunt gebruiken om de punt aan het derde woord toe te voegen, of u kunt zelfs de startpositie van indexOf opgeven.

String words = "word, word word word";
String newWords

int space1 = words.indexOf(" ");

newWords = words.substring(0, space1) & "." & words.substring(space1 + 1);

int lastSpace = newWords.lastIndexOf(" ");

newWords = newWords.subString(0, lastSpace) & "." & newWords.subString(lastSpace + 1);

(Ik denk dat iets in die zin zou werken, maar ik heb het niet getest en ik schreef het zonder een IDE)

Natuurlijk ben ik niet erg bekend met regex en heb je niet echt zoveel informatie gegeven, dus regex zou mogelijk een optie kunnen zijn, maar ik denk dat je de lengte (s) van het woord/de woorden moet kennen , op zijn minst.

0
toegevoegd
Bedankt, ik ben blij dat ik kon helpen - leuk om een ​​geaccepteerd antwoord te krijgen!
toegevoegd de auteur Andy, de bron
Dit was een leuke benadering Andy. Ik was in staat om iets in deze zin te doen, en het werkte goed. Dankje voor het antwoord.
toegevoegd de auteur Badweather, de bron

Als u regex wilt gebruiken, dan zou het volgende voor u moeten werken. De regexp is onderverdeeld in 3 groepen, waarnaar vervolgens kan worden verwezen in de vervangende regexp in replaceAll.

System.out.println("hello, my name is"
    .replaceAll("(\\w+)(,\\s*\\w+\\s+\\w+)(\\s+\\w+)", "$1.$2.$3") );
0
toegevoegd