Srs, boa noite,
Estou tentando fazer um código que leia linha sim, linha não de um arquivo texto conforme mostro abaixo e substituir caracteres por outro, dento de uma JTextArea.
A D A E7
Introdução
A
Um dia a areia branca
D
Seus pés irão tocar
E7
E vai molhar seus cabelos
Quero ler as notas em cima da letra da musica e trocar A ====> B , B =====> C# , C ===> D , D ====> E , E ==== F# , F ====> G, G=====>A , A# =====>C …, Quando quero trocar de tom uma musica, neste caso, quero tocar esta musica que esta em LA Maior para Si Maior.
Fiz um código com CASEs e IFs , só que o programa troca por exemplo o A =====>B, depois ele troca este B que eu já converti outra vez, ou seja, a cada passada de linha, o programa troca todas as cifras (texto) e o que eu quero é que ele troque linha a linha lida uma só vez, será que fui claro ? Vcs poderiam me dar uma ideia como fazer isso ??? Segue abaixo o código que fiz e que deu erro;
// Cliquei no botão alterar
if ((txttomatual.getText() .equals (txtnovotom.getText()))) {
JOptionPane.showMessageDialog(null, "Tom atual e Novo tom, não podem ser iguais ");
}else{
String tomAtual = txttomatual.getText();
String tomNovo = txtnovotom.getText();
String texto = txtarea.getText(); //pego o texto da jTextArea
String[] linhas = texto.split("\n");
for (int i = 0; i < linhas.length; i += 2) { //leio linha a linha do texto, somente a linha das cifras
System.out.println("cifra: " + linhas[i]);
int indice=0;
System.out.print(linhas[i]); // i + 2 para acessar a próxima linha, linha cifra
while ((indice < linhas[i].length())) { // leio caracteres a caractertes
char nota = linhas[i].charAt(indice); // pego o caracter A.B,C,D,E.F.G, A#, C#,D# ,F# ...
switch (tomAtual + tomNovo) { // tenho 2 JTextFields, onde tenho o tom atual e o novo tom
case "AB": //Se a musica esta no tom de A e eu quero transporta-la para B
if (nota == 'A') { // se o caractere lido for um A, eu substituo por B
txtarea.setText(txtarea.getText().replaceFirst("A", "B"));
}else if (nota == 'B') { //Se o caractere lido for um B eu o substituo por C#
txtarea.setText(txtarea.getText().replaceFirst("B", "C#"));
}
if (nota == 'C') {
txtarea.setText(txtarea.getText().replaceFirst("C", "D"));
}else if (nota == 'D') {
txtarea.setText(txtarea.getText().replaceFirst("D", "E"));
}
if (nota == 'E') {
txtarea.setText(txtarea.getText().replaceFirst("E", "F#"));
}else if (nota == 'F') {
txtarea.setText(txtarea.getText().replaceFirst("F", "G"));
}
if (nota == 'G') {
txtarea.setText(txtarea.getText().replaceFirst("G", "A"));
}
.
.
break;
default:
JOptionPane.showMessageDialog(null, "Novo tom, so aceita A,B,C,D,E,F,G ou
A#,C#,D#,E,F#,G#");
} // Fim Suitch
indice++; // leio o próximo caractere na linha
} // Fim while
} //Fim For
obrigado.
Armando