2016-12-11 4 views
0

문자열이 있는데 문자열에 "+"와 같은 특수 문자가 포함되어 있으면 문자열을 기본적으로 분할하고 그 문자열을 만날 때까지 가져옵니다. 다른 "+"또는 "-"기호와 같은 또 다른 특수 문자 (이 문자는 원하는 특수 문자이므로 마음에 두십시오). 두 문자 사이에 문자열 가져 오기

String strng = "hi+hello-bye/34"; 

그래서 난 당신이 어떤 방법으로이 문제를 해결하기 위해 사용하는 적 방법은 혼자 문자열 인사 또는 인사 또는 34을 반환 무엇을 원하는 :

그래서 내가이 문자열을 가지고 있다고 할 수 있습니다. 그리고 문자열 두 "+"기호를 두 번 "+"문자 다음에 첫 번째 문자열을 반환하려면 원하는 경우.

그래서 이런 식으로 뭔가 :

strng.split("\\+"); 

대신 그것의

는 반환 "안녕 안녕/34"만 "안녕하세요"를 반환합니다.

답변

1

하나의 옵션은 실제 분리 결과에 이러한 구분 기호를 유지하면서 염두에두고있는 여러 특수 문자 구분 기호에 입력 문자열을 분할하는 것입니다. 그런 다음 배열 배열을 반복하고 관심있는 특수 구분 기호 바로 다음에 나오는 부분을 반환합니다.

다음은이 논리를 구현하는 간결한 방법입니다. 구분자 집합은 +, -, */이지만 원하는대로 쉽게 변경할 수 있다고 가정합니다.

public String findMatch(String input, String delimiter) { 
    String[] parts = input.split("((?<=[+\\-*/])|(?=[+\\-*/]))"); 
    String prev = null; 
    for (String part : parts) { 
     if (delimiter.equals(prev)) { 
      return part; 
     } 
     prev = part; 
    } 

    return null; // default value if no match found 
} 

참고 :이 방법은 분할 입력 문자열 반복 할 경우 null을 반환하고 특별한 구분 기호를 찾을 수없는, 혹은 그것을 진행없는 문자열 배열의 마지막 요소로 찾습니다. 기본 반환 값을 자유롭게 변경할 수 있습니다.

+0

@EdwinAsoluka 어디서나 특별한 입력 구분 기호와 일치하지 않는 경우에만 'null'을 반환합니다. 내 코드를 실제로 테스트 했습니까? –

+0

이 문제는 첫 번째 인스턴스 만 반환하는 경우에도 문제가 발생했습니다. String strng = "hi + hello + bye/34"; findMatch (strng, "+"); 이것은 "hello"만 반환합니다. 그리고 for 루프와 charAt (i)를 사용해 보았습니다.하지만 이렇게하면 hello와 bye 대신 두 번 "hello"를 반환합니다. –

+0

@EdwinAsoluka 그런 다음 요구 사항을 명확히하지 않았습니다. 질문을 원하는 행동으로 업데이트하십시오. –