2016-08-14 2 views
0

저는 ArrayMap입니다. 그 중 keystag - randomWord입니다. 키의 일부가 특정 변수와 일치하는지 확인하고 싶습니다.ArrayMap.keySet()에 특정 변수 + Regex가 있는지 어떻게 확인할 수 있습니까?

나는 Patterns으로 장난하고 있지만 아무런 성공도하지 못했습니다. 이 순간에이 작업을 수행하는 유일한 방법은 for 루프의 모든 키를 반복 한 다음 ' - '에 키를 분할하고 그 첫 번째 값을 가져 와서 내 변수와 비교하는 것입니다.

for (String s : testArray) { 
    if ((s.split("(\\s)(-)(\\s)(.*)")[0]).equals(variableA)) { 
     // Do stuff 
    } 
} 

이 내가 단지 keySet변수를이 포함 된 경우 알 필요 특히 때문에, 나에게 매우 사악한 것, 그게 내가 관심이 전부입니다. 나는 contains() 메서드를 사용하는 방법에 대한 생각, 그리고에 넣어 (variableA + "(\\s)(-)(\\s)(.*)")하지만 작동하지 않는 것 같습니다.

이 경우 .contains() 메서드를 사용하는 방법이 있습니까? 아니면 수동으로 키를 루프해야합니까?

+0

는'.matches 시도 (+ Pattern.quote (variableA) + "*." "\\의 -. \\의 *")가'WiktorStribiżew @ –

+0

만 일하는 것이 그 정확한 수동으로 반복 할 때? – Timmiej93

+0

아무런 아이디어가 없습니다, 요점은 일치 항목이 아니라 정규식을 사용할 수 있다는 것입니다. –

답변

1

이러한 작업을 두 단계로 나눠야합니다. 먼저 태그를 추출한 다음 비교하십시오. 쉽게 각 단계가 제대로 개별적으로 동작 확인하고, 우리는 두 단계로 우리의 우려를 분리 한

for (String s : testArray) { 
    if (arrayMap. keySet().contains(extractTag(s)) { 
    // Do stuff 
    } 
} 

주의 사항 : 코드는 다음과 같이 보일 것입니다. 이제 질문은 "extractTag()을 어떻게 구현합니까?"입니다.

정규 표현식의 () 상징이 Matcher.group()를 통해 검색 할 수있는하는 group match을 만들

- 당신이 약 tag을 걱정하는 경우가 있으므로 같은 Pattern을 사용할 수

"(\\S+)\\s-\\s.*" 

이 경우 귀하의 extractTag() 방법은 것에 그냥 드와 일치하는 정규 표현식을 정의 할 필요가 오히려 String.split()를 사용하려는 경우

private static final Pattern TAG_PATTERN = Pattern.compile("(\\S+)\\s-\\s.*"); 
private static String extractTag(String s) { 
    Matcher m = TAG_PATTERN.matcher(s); 
    if (m.matches()) { 
    return m.group(1); 
    } 
    throw new IllegalArgumentException(
    "'" + s + "' didn't match " TAG_PATTERN.pattern()); 
} 

:처럼 리미터,이 경우 -;

"\\s-\\s" 

그것은 종종 하나 이상의 공백을 지원하기 위해 \\s+을 사용하는 것이 좋습니다,하지만 당신이 처리 할 필요가 입력에 따라 달라집니다 : 당신은 split() 호출에 다음과 같은 정규 표현식을 사용할 수 있습니다.

" - " 

하는 경우 귀하의 extractTag() 방법과 같습니다 : 당신이 항상 정확히 알고있는 경우 하나의 공간 - 다음 - 의해 - 하나의 대시 - 다음 - 의해 - 하나의 공간, 당신은 단지에 분할 할 수

private static String extractTag(String s) { 
    String[] parts = s.split(" - "); 
    if (parts.length > 1) { 
    return s[0]; 
    } 
    throw new IllegalArgumentException("Could not extract tag from '" + s + "'"); 
} 
관련 문제