Pessoal criei um simples analisador com a finalidade de verificar a existencia de comentarios multi linha, abaixo o codigo:
public class CharScanner {
private char[] c;
public CharScanner(char[] c) {
this.c = c;
}
public void isML_COMMENT() {
for(int i=0; i < c.length; i++){
if (c[i] == '/') {
i++;
if (c[i] == '*') {
i++;
StringBuffer buf = new StringBuffer();
while (c[i] != '*' && i < c.length-1) {
buf.append(c[i]);
i++;
}
if (c[i] == '*') {
i++;
if (c[i] == '/') {
System.out.println(buf.toString()+"\n");
} else if (c[i] != '/') {
System.out.println("\nUnexpected char
O problema esta na string em que eu coloco os comentarios, quando ela possui espaços em branco em suas extremidades, o codigo funciona corretamente, mas quando não há espaços ele lança um erro (ArrayIndexOutOfBoundsException), não estou conseguindo entender porque esta acontecendo isso.
Se alguem puder me apontar onde esta o erro, agradeço.
/
O problema esta na string em que eu coloco os comentarios, quando ela possui espaços em branco em suas extremidades, o codigo funciona corretamente, mas quando não há espaços ele lança um erro (ArrayIndexOutOfBoundsException), não estou conseguindo entender porque esta acontecendo isso.
Se alguem puder me apontar onde esta o erro, agradeço.
in line: "
+ i);
}
} else if (c[i] != '*') {
System.out.println("\nUnexpected char
O problema esta na string em que eu coloco os comentarios, quando ela possui espaços em branco em suas extremidades, o codigo funciona corretamente, mas quando não há espaços ele lança um erro (ArrayIndexOutOfBoundsException), não estou conseguindo entender porque esta acontecendo isso.
Se alguem puder me apontar onde esta o erro, agradeço.
*
O problema esta na string em que eu coloco os comentarios, quando ela possui espaços em branco em suas extremidades, o codigo funciona corretamente, mas quando não há espaços ele lança um erro (ArrayIndexOutOfBoundsException), não estou conseguindo entender porque esta acontecendo isso.
Se alguem puder me apontar onde esta o erro, agradeço.
in line: " + i);
}
}
}
}
}
public static void main(String[] args) {
String cadeia = " /* J2SE */\n/* J2EE\n J2ME */ ";
CharScanner scanner = new CharScanner(cadeia.toCharArray());
scanner.isML_COMMENT();
}
}
O problema esta na string em que eu coloco os comentarios, quando ela possui espaços em branco em suas extremidades, o codigo funciona corretamente, mas quando não há espaços ele lança um erro (ArrayIndexOutOfBoundsException), não estou conseguindo entender porque esta acontecendo isso.
Se alguem puder me apontar onde esta o erro, agradeço.
Oi,
Você tem um i++ no lugar errado,
acho que é logo no primeiro if…
olha como eu fiz para ele analizar um comentario… é seu mesmo código mais modificado…
[code]public class CharScanner {
private char[] c;
public CharScanner(char[] c) {
this.c = c;
}
public void isML_COMMENT() {
for(int i=0; i < c.length; i++) {
if (c[i] == '/') {
if (c[i+1] == '*') {
i++;
//
// Carrega a posicao.
//
StringBuffer buf = new StringBuffer();
buf.append(c[i]);
//
// Soma mais 1.
//
i++;
while (i < c.length) {
//
// Se a posicao existe um asterisco.
//
if (c[i] == '*') {
//
// Carrega a posicao
//
buf.append(c[i]);
//
// Soma mais 1.
//
i++;
if (c[i] == '/'){
//
// Carrega a posicao
//
buf.append(c[i]);
//
// Soma mais 1.
//
i++;
//
// Para o while.
//
break;
}
else{
//
// Carrega a posicao
//
buf.append(c[i]);
//
// Soma mais 1.
//
i++;
}
}
else{
//
// Carrega a posicao
//
buf.append(c[i]);
//
// Soma mais 1.
//
i++;
}
}
if (c[i] == '*') {
i++;
if (c[i] == '/') {
System.out.println(buf.toString()+"\n");
} else if (c[i] != '/') {
System.out.println("\nUnexpected char
Obs: Não testei, só coloquei a minha logica de analizar…
Tchauzin!/
Obs: Não testei, só coloquei a minha logica de analizar…
Tchauzin! in line: "
+ i);
}
} else if (c[i] != ‘*’) {
System.out.println("\nUnexpected char
Obs: Não testei, só coloquei a minha logica de analizar…
Tchauzin!*
Obs: Não testei, só coloquei a minha logica de analizar…
Ola lina, antes de tudo, obrigado pela sua ajuda, mas seu codigo nao funcionou, quando executo-o ele não reconhece o caractere ‘*’ e lança uma exception ArrayIndexOutOfBounds.
Boa noite,
como eu disse, eu fiz muito rapido… e nem testei o código…
eu tenho um analizador pronto aqui…
se quiser dar uma olhada eu posso lhe passar,