Lendo uma linha de um texto, e separando elementos específicos

2 respostas
L

Olá pessoal,

Estou fazendo um trabalho da faculdade, onde que tenho que fazer um processador de textos do tipo Markdown. Só que em algumas formatações estou tento problemas, por exemplo:

“Aqui já estamos em um novo parágrafo. O
trecho entre asteriscos será enfatizado
em itálico, e o trecho entre asteriscos
duplos será enfatizado em negrito. É possível.”

Deve retornar isso:

Text{content="Aqui já estamos em um novo parágrafo. O ", breakLine=true}

Text{content=trecho , breakLine=false}

Text{content=entre asteriscos, style=I, breakLine=false}

Text{content= será enfatizado, breakLine=true}

Text{content=em itálico, e o trecho , breakLine=false}

Text{content=entre asteriscos, style=B, breakLine=true}

Text{content=duplos, style=B, breakLine=false}

Text{content= será enfatizado em negrito. É possível, breakLine=true}

Minha dúvida é o seguinte eu fiz dois FOR para eu conseguir separar os trechos que estão com * *, mas sempre dá alguma problema, meu código que usei:

if (c == '*') {
                    char aux = line.charAt(i + 1);
                    if (c == '*' && aux == '*') {
                        for (int j = i+1 ; j < line.length(); j++) {
                            int tl = line.length();
                            char aux1 = line.charAt(j);
                            char aux2 = line.charAt(j + 1);
                            if (aux1 == '*' && aux2 == '*') {
                                Text tx = new Text();
                                tx.setContent(line.substring(i + 2, j));
                                tx.setStyle("B");
                                tx.setBreakLine(true);//arrumar
                                t.insert(tx, po++);
                                i = j;
                                break;
                            }
                        }
                    } else {
                        for (int j = i +1; j < line.length(); j++) {
                            int t6 = line.length();
                            char aux3 = line.charAt(j);
                            if (aux3 == '*') {
                                Text tx = new Text();
                                tx.setContent(line.substring(i + 1, j));
                                tx.setStyle("I");
                                tx.setBreakLine(true);// arrumar
                                t.insert(tx, po++);
                                i = j;
                                break;
                            }

                        }
                    }
                }

Há e mais uma duvida, como consigo identificar uma quebra de linha?

Alguém poderia me dar uma ajuda?

2 Respostas

Luiz_Augusto_Prado

LucasRomao:
Olá pessoal,

Estou fazendo um trabalho da faculdade, onde que tenho que fazer um processador de textos do tipo Markdown. Só que em algumas formatações estou tento problemas, por exemplo:

“Aqui já estamos em um novo parágrafo. O
trecho entre asteriscos será enfatizado
em itálico, e o trecho entre asteriscos
duplos será enfatizado em negrito. É possível.”

Deve retornar isso:

Text{content="Aqui já estamos em um novo parágrafo. O ", breakLine=true}

Text{content=trecho , breakLine=false}

Text{content=entre asteriscos, style=I, breakLine=false}

Text{content= será enfatizado, breakLine=true}

Text{content=em itálico, e o trecho , breakLine=false}

Text{content=entre asteriscos, style=B, breakLine=true}

Text{content=duplos, style=B, breakLine=false}

Text{content= será enfatizado em negrito. É possível, breakLine=true}

Minha dúvida é o seguinte eu fiz dois FOR para eu conseguir separar os trechos que estão com * *, mas sempre dá alguma problema, meu código que usei:

if (c == '*') {
                    char aux = line.charAt(i + 1);
                    if (c == '*' && aux == '*') {
                        for (int j = i+1 ; j < line.length(); j++) {
                            int tl = line.length();
                            char aux1 = line.charAt(j);
                            char aux2 = line.charAt(j + 1);
                            if (aux1 == '*' && aux2 == '*') {
                                Text tx = new Text();
                                tx.setContent(line.substring(i + 2, j));
                                tx.setStyle("B");
                                tx.setBreakLine(true);//arrumar
                                t.insert(tx, po++);
                                i = j;
                                break;
                            }
                        }
                    } else {
                        for (int j = i +1; j < line.length(); j++) {
                            int t6 = line.length();
                            char aux3 = line.charAt(j);
                            if (aux3 == '*') {
                                Text tx = new Text();
                                tx.setContent(line.substring(i + 1, j));
                                tx.setStyle("I");
                                tx.setBreakLine(true);// arrumar
                                t.insert(tx, po++);
                                i = j;
                                break;
                            }

                        }
                    }
                }

Há e mais uma duvida, como consigo identificar uma quebra de linha?

Alguém poderia me dar uma ajuda?

vc pode usar uma combinação de stringtokenizer com regex

exemplos com stringtokenizer:




http://javarevisited.blogspot.com.br/2011/09/string-split-example-in-java-tutorial.html
http://home.cogeco.ca/~ve3ll/jatutor7.htm

Regex (explressões regulares er)

a quebra de linha em html é a tag br:

em java é “/n”

Vc tem obrigatoriamente que fazer isso com estes caracteres?
O ideal é que vc fizesse um marcador que de inicio diferente do de fim.

olhe o exemplo do guj para negritar.
Ele usa uma combinação de colchetes e b. O marcador de inicio não tem barra e o de fim tem.

se mesmo assim não puder mudar a forma como está trabalhando, então comece a fazer o tratamento com os asteriscos duplos, porque se iniciar o tratamento com os asteriscos simples, vai dar pau quando passar pelos asteriscos duplos, pois eles também são uma combinação de asteriscos simples.

L

Infelizmente não posso mudar o formato do trabalho, eu irei tentar usar estes métodos que mencionou,

Estas seguintes linhas de comando:

char aux = line.charAt(i + 1);
                        if (c == '*' && aux == '*') {

Tem algum outro modo que eu possa verificar o próximo carácter, sem utilizar o (i+1)? Em certo ponto da problemas por que excede o limite.

Criado 6 de outubro de 2013
Ultima resposta 7 de out. de 2013
Respostas 2
Participantes 2