Qual é a melhor maneira de ter StringTokenizer dividir uma linha de texto em variáveis ??pré-definidas

StackOverflow https://stackoverflow.com/questions/236387

  •  04-07-2019
  •  | 
  •  

Pergunta

Eu não tenho certeza se o título é muito claro, mas basicamente o que tenho a fazer é ler uma linha de texto de um arquivo e dividi-la em 8 variáveis ??de cadeia diferentes. Cada linha terá os mesmos 8 pedaços na mesma ordem (título, autor, preços, etc). Assim, para cada linha de texto, eu quero acabar com 8 cordas.

O primeiro problema é que os dois últimos campos na linha pode ou não estar presente, então eu preciso fazer alguma coisa com stringTokenizer.hasMoreTokens, caso contrário ele vai morrer messily quando os campos 7 e 8 não estão presentes.

Eu realmente gostaria de fazê-lo em um, enquanto por loop, mas eu não sei como dizer que ciclo o que a ordem dos campos vai ser para que ele possa preencher todos os 8 (ou 6) strings corretamente . Por favor, me diga que não há uma maneira melhor que o uso de 8 aninhados if!

EDIT: O String.split solução parece definitivamente parte dele, por isso vou usar que em vez de StringTokenizer. No entanto, eu ainda não tenho certeza do que a melhor maneira de alimentar as cordas individuais para o construtor. Seria a melhor maneira é ter a classe esperando uma matriz e, em seguida, basta fazer algo parecido com isso no construtor:

line[1] = isbn;
line[2] = title;
Foi útil?

Solução

A melhor maneira é não usar um StringTokenizer em tudo, mas usar de Cordas método split . Ele retorna uma matriz de strings, e você pode obter o comprimento do que isso.

Para cada linha no seu arquivo que você pode fazer o seguinte:

String[] tokens = line.split("#");

tokens terá agora 6 - 8 Strings. Use tokens.length() para descobrir quantos, em seguida, criar o objeto da matriz.

Outras dicas

expressão regular é o caminho. Você pode converter a cadeia de entrada em uma matriz de String usando o método split

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split (java.lang.String)

Será que uma expressão regular com grupos de captura de trabalhar para você? Você pode certamente fazer partes do opcional expressão.

Um exemplo de linha de dados ou três pode ser útil.

Este é um arquivo CSV ou semelhante, por acaso? Se assim for, há bibliotecas para ajudá-lo, por exemplo Apache Commons CSV (link para alternativas em sua página também). Ele vai te dar um String [] para cada linha no arquivo. Basta verificar o tamanho da matriz para saber o que campos opcionais estão presentes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top