Separar palavras de um arquivo txt

Olá pessoal,
Tudo bem com vocês?

Vou direto ao objetivo… Meu programa precisa ler um arquivo “.txt”, separar as palavras em um array e depois disso listar o array das palavras e a posição onde as palavras aparece… Segue abaixo meu código:
public class Tarefa {

	public static void main(String[] args) {
		String[] s = new String[200];
		
		Scanner ler = new Scanner(System.in);

		System.out.printf("Informe o nome de arquivo texto:\n");
		// Arquivo que busco no desktop C:\Users\zezinho\Desktop\teste.txt
		String nome = ler.nextLine();

		System.out.printf("\nConteúdo do arquivo texto:\n");
		try {
			FileReader arq = new FileReader(nome);
			BufferedReader lerArq = new BufferedReader(arq);

			String linha = lerArq.readLine();
			while (linha != null) {
				 s = linha.split("\\s|\\r\\n|\\r|\\n");
						for (int i = 0; i < 200; i++) {
						System.out.println(s[i]);
								}
				linha = lerArq.readLine(); // lê da segunda até a última linha
				}
			arq.close();
		} catch (IOException e) {
			System.err.printf("Erro na abertura do arquivo: %s.\n", e.getMessage());
		}
		System.out.println();
	}
}

Amigo, este código é uma cópia de http://www.devmedia.com.br/lendo-dados-de-txt-com-java/23221.

Isto me parece uma questão de aula que você deveria fazer para aprender.

Mas vai ai uma idéia.

Caso queira separar em palavras terá que fazer um split com (" "). É uma solução paleativa.

public static void main(String[] args) {
		String caminho = System.getProperty("user.home");
		Scanner ler = new Scanner(caminho + "/teste.txt");
		String nome = ler.nextLine();
		
		try {
		      FileReader arq = new FileReader(nome);
		      BufferedReader lerArq = new BufferedReader(arq);
		      
		      String linha = lerArq.readLine(); 
		      String textoConteudo = "";
		      while (linha != null) {
		    	textoConteudo += linha;
		        linha = lerArq.readLine(); 
		      }
		      String linhas[] = textoConteudo.split("|");
		      for(int i = 0;i < linhas.length;i++){
		    	  System.out.println("Letra " + linhas[i] + " na posição " + (i+1) );
		      }
		      arq.close();
		    } catch (IOException e) {
		          e.getMessage();
		    }
	}

A resposta já se encontra no enunciado do problema principalmente nesse trecho

separar as palavras em um array

As palavras que estão no arquivo .txt estão separadas como?

blayd2015 o conteúdo do arquivo txt é um código pequeno em C++. Só que meu sistema tem que ler esse arquivo e separar cada coisa e dizer a posição e o tipo que é. Por exemplo, ao ler esse arquivo deve imprimir na tela algo como:

Palavra | Tipo | Posição
begin |inicialização| 1
; | Delimitador| 2
if | condiçao | 3
( | parenteses | 4

Esses dados são só um exemplo do que eu quero fazer ao ler o o codigo txt e separá-los em um array e em seguida indicar o que são e a posição onde se encontram…

bom então vamos assumir que seu arquivo está com UTF-8 e as palavras estão separadas com espaço
função de leitura

    private String lerArquivo(File f) throws Exception {
            BufferedReader reader = null;

            StringBuilder sb = new StringBuilder();

            try {
                reader = new BufferedReader(new InputStreamReader(new FileInputStream(f)));

                while (reader.ready()) {
                    sb.append(reader.readLine()).append("\n");
                }
            } finally {
                if (reader != null) {
                    reader.close();
                }
            }

            return sb.toString();
        }

agora com a String em mãos vc quebra

String tmp = lerArquivo(new File("C:\\Users\\zezinho\\Desktop\\teste.txt"));

String[] split = tmp.split("\n"); // vai quebrar por linha

depois num laço de repetição vc vai depurando pra achar o que vc quer quebrando por espaços

for (int i = 0; i < split.length; i++) {
    String[] split1 = split[i].split("\s");
...
}

O problema é que tem momentos em que seguindo o exemplo “escreve (valor_3);” eu deveria separar as palavras que não possuem um espaço entre elas para distingui-las…

escreve - palavra reservada - posição 1
( - parenteses - posição 2
valor_3 - valor - posição 3
) - parenteses - posição 4
; - Delimitador - posição 5

Algo mais ou menos assim…

então uma dica q eu te dou é colocar variáveis no texto pra vc fazer replace ou split ou substring exemplo

{inicialização}begin
{Delimitador};
{condição}if
{parenteses abre}(
{parenteses fecha})