2011-12-06 3 views
0

내가 가진 특정 문제에 대한 해결책을 찾지 못했습니다. 문자열에서 단어를 조작하고 싶은 XML 파싱을하고 있습니다.Java를 사용하여 문자열의 특정 위치에서 여러 부분 문자열 바꾸기/추가

다음과 같은 경우가 있습니다. 'word, word word word' - 단어는 사전에 무엇을 알지 못하기 때문에 어떤 문자열이 될 수 있습니다.

문자열을 조작하여 다음 결과를 얻고 싶습니다. 'word., word word. word' - 첫 번째 단어와 세 번째 단어 뒤에 '.'을 추가하고 싶습니다.

이 작업에 적합한 방법은 무엇입니까? 정규식이 최선의 방법일까요?

+0

이미이 작업을 수행하는 방법에 대한 좋은 생각이있는 것 같습니다. regexes가 빌트인 문자열 방법보다 어떻게 든 "더 나은"것인지, 아니면 하나가 다른 것보다 더 효율적인지에 대한 의견을 단순히 이끌어 낼 수 있습니까? 말하자면, 나는 당신을 위해 어느 것이 든 효과가 있다고합니다. Regexes 및 문자열 모두 약간의 두통과 일을 할 것입니다. – Sanjamal

답변

0

단어가 동일한 문자를 사용하여 구분된다는 가정하에 가장 간단한 방법은 indexOf(" ")을 사용한 다음 substring 메서드를 사용하여 반환 된 색인 앞에 점을 추가하는 것입니다. 당신은 또한 세 번째 단어에 점을 추가하기위한 lastIndexOf(" ")을 사용할 수 있습니다, 또는 당신도 즉

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

indexOf의 시작 위치를 지정할 수 있다는 것을 기억하십시오 (나는 그 라인을 따라 뭔가 일 것이라고 생각하지만, 나는 테스트하지 않았습니다 그리고 IDE없이 썼습니다.)

물론 저는 정규 표현식에 익숙하지 않고 그 많은 정보를 제공하지 않았기 때문에 정규 표현식이 옵션이 될 수 있습니다. 적어도 단어의 길이를 알아라.

+0

이것은 멋진 접근이었습니다. Andy. 나는이 선을 따라 무엇인가 할 수 있었고 잘 돌아갔다. 답변 해주셔서 감사합니다. – Badweather

+0

감사합니다. 기꺼이 도와 드리겠습니다. 답변을 수락 해 주셔서 감사합니다. – Andy

0

regex를 사용하려면 다음이 필요합니다. regexp는 replaceAll의 대체 정규 표현식에서 참조 할 수있는 3 개의 그룹으로 나뉩니다.

System.out.println("hello, my name is" 
    .replaceAll("(\\w+)(,\\s*\\w+\\s+\\w+)(\\s+\\w+)", "$1.$2.$3")); 
관련 문제