2012-06-23 4 views
0

두 문자열을 서로 비교하려고합니다. 하나는, 예를 들면 포함두 문자열의 값 비교

String x =" aa bb cc dd ee " 

다른 하나를 :

String y =" aa bb " 

지금 나는 내가 정규식을 사용하여 반대를 수행하기 위해 할 수있는 것을 알고이

if (any values from String x EXISTS IN String y) 

if (y.matches(???)){System.out.println("true");} 
else{System.out.println("false");} 

을하고 싶은, 이렇게 :

if (x.matches(".*"+y+".*")){do something} 

B 유토 어떤 값이 문자열 x에 일치하는지 확인하는 방법이 있는지 알고 싶습니다.

+0

'x = "aa bb cc dd ee"'및'y = ee aa' 인 경우 코드가 true를 반환해야합니까? – Makoto

답변

2

"문자열의 값"을 공백 사이의 문자 쌍이라고 가정하면 두 문자열을 모두 분할하여 값 집합 (Set<String>)으로 변환하고 Set 메서드를 사용하여 원하는 값을 계산하십시오 (containsAll() , removeAll(), retainAll() 등).

+0

아니요, 파일에서 데이터를 읽는 예일 뿐이며 단순히 분할 할 수 없습니다. –

+0

"값"이라고 부르는 것을 설명하십시오. 그러나 나는 당신이 어떻게 파일로부터 일련의 단어를 구성 할 수 없었는지 알지 못합니다. –

+1

나는 여전히 당신이 두 세트를 가지고 있어야한다고 생각하고, 그 세트를 비교한다. 유일한 차이점은 String이 아닌 Date를 나타내는 데 Date를 사용해야한다는 것입니다. BTW, 방금 내 답변에서 (하지만 차선책으로) 제안 할 정확한 답변을 수락했습니다. –

1

String x가 String y에 있는지 확인하려는 경우 .contains (String str) 메서드를 사용하십시오.

문자열의 공백으로 구분 된 부분이 y 내에 포함되어 있는지 확인하려는 경우 분할 작업의 각 부분에서 나누기 및 포함 작업을 수행해야합니다.

+0

sting x에 다른 값이없는 값이 있기 때문에 .contain이 작동하지 않습니다. –

+0

그 이유는 x를 공백으로 구분 된 부분으로 분할 한 다음 각 부분에 contains를 사용하는 것이 좋습니다. JB Nizet이 아래 답변에서 제안한 것보다 많이. –

1
String x_trimmed = x.trim(); 
String y_trimmed = y.trim(); 

String[] x_elements = x_trimmed.split("\\s+"); 
String[] y_elements = y_trimmed.split("\\s+"); 

Set<String> x_elementsSet = new HashSet<String>(Arrays.asList(x_elements)); 
Set<String> y_elementsSet = new HashSet<String>(Arrays.asList(y_elements)); 

for (String x : x_elementsSet) { 
    if (y_elementsSet.contains(x)) { 
     System.out.println("true"); 
    } else { 
     System.out.println("false"); 
    } 
} 
+0

String.trim()을 사용하여 트리밍하지 않는 이유는 무엇입니까? Set 대신 List를 사용하는 이유는 무엇입니까? 왜 각 반복마다 배열을 목록으로 변환합니까? –

+0

@JBNizet : 맞아! 힌트를 주셔서 고마워요! :) – user278064

+0

그냥 변수 이름을 xxxSet로 설정하지 않았기 때문입니다. java.util.List 대신 java.util.HashSet을 사용하십시오. 조회 (O (1)보다는 O (n))에서 훨씬 효율적입니다. –