Problema com Estrutura e Lista

Tenho que resolver o seguinte problema:

João está trabalhando em uma mina, tentando retirar o máximo que consegue de diamantes “<>”. Ele deve excluir todas as particulas de areia “.” do processo e a cada retirada de diamante, novos diamantes poderão se formar. Se ele tem como uma entrada .<…<<…>>…>…>>>., três diamantes são formados. O primeiro é retirado de <…>, resultando .<…<>…>…>>>. Em seguida o segundo diamante é retirado, restando .<…>…>>>. O terceiro diamante é então retirado, restando no final …>>>., sem possibilidade de extração de novo diamante.

Criei então o seguinte código:

package exerc.aleatorios;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class DiamantesEAreia {

public static void main(String[] args) {
	
	try (Scanner teclado = new Scanner(System.in)) {
		int n = teclado.nextInt();
		teclado.nextLine();
		List<List<Character>> entradas = new ArrayList<List<Character>>();
		int i = 1;
		while(i<=n) {
			List<Character> mina = new ArrayList<Character>();
			String frase =  teclado.nextLine();
			boolean verifica = false;
			for(char letra : frase.toCharArray()) {
				if (letra != '<' || letra != '>' || letra != '.' ) {
					verifica = true;
				}
			}
			if(verifica) { frase= teclado.nextLine();}
			while(frase.length()>1000) {
				frase = teclado.nextLine();
			}
			for(char letra : frase.toCharArray()) {
					if(letra != '.') {
						mina.add(letra);							
					}
				}
			entradas.add(mina);
			i++;
		}
		
		List<Integer> saida = new ArrayList<Integer>();
		for(List<Character> caso : entradas) {
			int contagem = 0;
			boolean verifica = false;
			while(!verifica) {
				for(int j = 0;j< (caso.size()-1);j++) {
					if(caso.get(j) == '<' && caso.get(j+1) == '>') {
						contagem++;
						caso.remove(j+1);
						caso.remove(j);
						break;
					}else {
						verifica = true;
					}
				}
				if (caso.size() == 2 && (caso.get(0) == '<' && caso.get(1) == '>') ) {
					contagem++;
				}
			}
			saida.add(contagem);
		}
		
		for(Integer valorFinal : saida) {
			System.out.println(valorFinal);
		}
	}
	
}

}

Testei e algumas vezes da certo, outras não, alguém pode me ajudar? Não sei o que fiz errado.

while(!verifica) {
  for(int j = 0;j< (caso.size()-1);j++) {
    if(caso.get(j) == '<' && caso.get(j+1) == '>') {
      contagem++;
      caso.remove(j+1);
      caso.remove(j);
      break;
    }else {
      verifica = true;
    }
  }
  if (caso.size() == 2 && (caso.get(0) == '<' && caso.get(1) == '>') ) {
    contagem++;
  }
}

O problema está neste trecho inteiro.

Recomendo que vc coloque alguns comentários no código para que aqueles que lerem seu código possam entender melhor o que está sendo feito, pois não é fácil entender o código dos outros mesmo sendo uma pessoa experiente no assunto.

Consegui ajustar aqui, mas valeu pela dica

Qual era o problema? Foi o que o colega apontou?