Buscar String em uma lista

Galera !

Fiz um algoritmo para inserir, listar e buscar String. Se alguém puder contribuir seria ótimo.

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

public class Exer03 {
public static void main(String[] args) {

	Scanner scan = new Scanner(System.in);

	List<String> lista = new ArrayList<>();

	int opcao;
	String palavra = " ";

	do {

	System.out.println("Informe as opções:\n" + " 1 - Inserir a plalavra\n" + " 2 - Procurar a palavra\n"
			+ " 3 - Listar as palavras\n" + " 4 - sair");
	opcao = Integer.parseInt(scan.nextLine());
	System.out.println();
	
	switch (opcao) {
	case 1: {
		System.out.print("Informe a palavra: ");
		palavra = scan.nextLine();
		lista.add(palavra);
		break;
	}
	case 2:{
		System.out.println("Informe a palavra que deseja procurar: ");
		String procuraPalavra = scan.nextLine();
		for (int i = 0; i < lista.size(); i++) {
			if (lista.contains(procuraPalavra)) {
				System.out.println("Palavra encontrada " + procuraPalavra);
				break;
			}else {
				System.out.println("Palavra não encontrada");
				break;
			}
		}
		break;
	}
	case 3: {
		System.out.println(lista.toString());
		break;
	}
	case 4:{
		System.out.println("Fim do Programa");
		break;
	}
	
	default:
		System.out.println("Opção inválida !");
	}
	
	}while (opcao != 4);
	
}

}

Não li o seu programa inteiro, mas um erro é o for na parte de procurar palavras, o método contains já vai procurar a String entre em todos os elementos do ArrayList, não existe motivo para repetir a procura para cada elemento, apesar disso não gerar um erro no resultado final.

E embora não seja um erro, não precisa colocar o código para cada case dentro de chaves.