2013-12-11 7 views
0

문자열의 ArrayList를로드하고 특정 단어가 사용되는지 확인하는 코드를 작성하고 있습니다. 이상하게 들릴지 모르지만 구체적 내용은 다음과 같습니다.ArrayList에서 특정 단어 찾기

"toot"(대문자 사용, 오 (o) 대신 "0"을 허용하는 예 : "to0t"포함)이 포함 된 팅 수는 계산해야합니다. 그러나 다른 작품의 일부로 "" "을 포함하는 경우에만 to을 계산해서는 안됩니다. 예를 들어"to "이 "는 to 수를 세는 데 충분하지 않습니다.

많은 것들을 시도했지만 여전히 제대로 작동하지 않는 것으로 보입니다. 여기

내가 회원의 도움 후 지금 가지고있는 것입니다 :

for (String toot : toots) { 
     toot = toot.toLowerCase().replace("0", "o").trim(); 
     if(toot.equalsIgnoreCase("toot")){ 
      tootsWithToot++; 
     } 
} 

예는 "툿 메시지"(각 행은 별도의 메시지가)와 같습니다

** 1 툿 2 t00t

돌아올 것이다

toote r tooting **

결과는 2로 표시되어야하고 tooting은 O 또는 0 유사 단어 인 "toot"가 아니어야합니다.

나는 변화가 있어야한다고 생각하지만, 나는 100 % 확실하지 않다. 다시 한 번,이 유머러스 한 요청에 대해 사과드립니다. 아직 초보 프로그래머입니다.

+0

난 단지 t00ts'이 당신의 예에 따라 계산되어서는 안된다'toots''로 toot''의 한 인스턴스를 볼 수 있습니다. –

+0

네 말이 맞아. 미안해. 나는 그것을 바꿨다. – user3089390

답변

2

다음은 요구 사항과 일치해야합니다. 그것은 당신의 문자열의 obnly "전체 단어"일치하는 정규식을 사용합니다.

for (String toot : toots) { 
    toot = toot.toLowerCase().replace("0", "o").trim(); 
    toot = toot.toLowerCase().replace("O", "o").trim(); 
    toot = toot.toLowerCase().replace("T", "t").trim(); 
    if(toot.matches(".*\\btoot\\b.*")){ 
     tootsWithToot++; 
    } 
} 

더 순수 정규식 예는 다음과 같을 것이다

for (String toot : toots) { 
    if(toot.matches(".*\\b[tT][oO0]{2}[tT]\\b.*")){ 
     tootsWithToot++; 
    } 
} 

이 정규식의 경우를 무시하고, toot의 인스턴스를 일치 t의 [tT]과 오의 [oO0] (도 0을 포함하는 동안) , 그들이 단어 분리 문자로 둘러싸 일 때.

Regular expression visualization

+0

당신은 그것을 풀 수도 있었을 것입니다 !!! – user3089390

+1

대소 문자를 무시할 수도 있습니다 : (? i). * \ bt [o0] {2} t \ b. * – bcorso

+0

이미지를 어디서 받았습니까? – bcorso