2011-09-29 3 views
3

먼저 불쌍한 영어에 대해 사과해야합니다. 내 경우를 설명해주십시오. 사용자가 입력 할 수있는 2 개의 텍스트 상자가 있다고 가정합니다. 서버 측에서는 두 개의 문자열을 ','문자로 구분 된 단일 문자열로 결합하려고합니다. 예를 들어, 사용자 이 첫 번째 텍스트 상자를 "hello world"로 입력하고 두 번째 텍스트 상자 "foo bar"를 입력하면 마지막 문자열은 "hello world, foo bar"여야합니다. 이 문자열은 다른 작업을 통해 해당 내용을 활용하려면 나중에 으로 분할해야합니다. 따라서 문자열이 분리되어 ','문자가 구분 기호로 사용되면 문자열은 [0] = "hello world" 문자열 [1] = "foo bar" 문자열이됩니다.정규 표현식을 사용하여 내 자신의 이스케이프 문자 처리

물론 이것은 사용자가 문자열에 ','문자를 입력하면 올바르게 분할 될 수없는 문자열에 이 나오기 때문에 취약합니다. 예를 들어 사용자가 첫 번째 텍스트 상자에 "hello, world"를 입력하고 두 번째 텍스트 상자에 "foo, bar"를 입력하면 최종 문자열은 "hello, world, foo, bar"가되고 분할 결과는 잘못 4 개의 분리 된 문자열이 될 수 있습니다.

나는 사용자 정의 이스케이프 문자를 생각해 냈습니다. 사용자가 ','문자를 입력하면 서버 측에 '/' 문자가 앞에 와야합니다. 예를 들어 사용자가 "hello, world"및 "foo, bar" 을 입력하면 정확한 문자열 인 이 알려져 있기 때문에 마지막 문자열은 이제 "hello /, world, foo /, bar"가됩니다. 그 앞에 '/'문자가없는 단일 ','문자. 다음

가 그것을 처리하는 일부 자바 코드를 썼다

String testText = "hello/,world,foo/,bar"; 
    String[] split = testText.split("[^/],"); 
    for(int i=0; i<split.length; i++) 
    { 
     System.out.println(split[i]); 
    } 

반환 된 결과이다

문자열 [0] = 헬로/WORL

문자열 [1] =/foo와 , bar

"world"단어의 'd'문자가 손실되기 때문에 올바르지 않습니다. 이 경우에 대한 구분 기호는 '/'다음에 오는 문자가 아니며 매우 이해하기 쉽습니다. 하지만 "/"문자가 아닌 문자 뒤에 오는 단락 기호로 문자열을 분할하는 것과 같은 것을 원합니다. 중간에있는 문자 만 ','내 문자에만 적용하십시오 문자열이 분할됩니다. 나는 내 정기를 다시 작성해야 할 수도 있습니다 실현

문자열 [0] = 안녕하세요/세계

문자열 [1] = foo는/바 다음과 같이 그래서 최종 결과는 정확합니다 표현 방법은 모르겠지만 어떻게해야할지 모르겠다. 어떤 제안이라도 환영 할 만하다 ..

+2

문자열 결합을 피하십시오. 네가 뭔가 잘못 할 수있는 방법이 너무 많아. 예를 들어,'/'s를 이스케이프 처리해야합니다. 누군가 "hello /"및 "world"를 입력 할 수 있습니다. 그러면 'hello /, world'가됩니다. –

+0

* "어떤 제안이라도 환영합니다."* 질문하십시오. –

답변

6

neagative lookbehind이 일치하지 않고 , 전에 더 /이 없음을 보장

testText.split("(?<!/),"); 

뒤에 부정적인 모습을 사용합니다.

+0

stema, 감사합니다 :) –

관련 문제