public class ValidadorExpresion
{
public static boolean esValidaAF(String expresion)
{
boolean esValida = true;
boolean estadoTerminal = false;
int estado = 1;
final char PUNTO = '.';
final char COMA = ',';
final char CERO = '0';
final char UNO = '1';
char c;
for(int i = 0 ; i < expresion.length() && esValida ; i++)
{
c = expresion.charAt(i);
switch(estado)
{ case 1:
if(UNO == c)
{ estado = 2;
}else
{ esValida = false;
}
break;
case 2:
if(PUNTO == c)
{ estadoTerminal = true;
}else if(COMA == c)
{ estado = 3;
}else
{ esValida = false;
}
break;
case 3:
if(UNO == c)
{ estado = 4;
}else if(CERO == c)
{ estado = 5;
}else
{ esValida = false;
}
break;
case 4:
if(PUNTO == c)
{ estadoTerminal = true;
}else
{ esValida = false;
}
break;
case 5:
if(COMA==c)
{ estado = 6;
}else if(PUNTO == c )
{ estadoTerminal = true;
}else { esValida = false;
}
break;
case 6:
if(CERO == c || UNO == c)
{ estado = 7;
}else
{ esValida = false;
}
break;
case 7:
if(PUNTO == c)
{ estadoTerminal = true;
}else
{ esValida = false;
}
}
}
return esValida && estadoTerminal;
}
public static void probarAF(String expression)
{
System.out.println(String.format("%10s %s",expression,esValidaAF(expression)));
}
public static void main(String[] args)
{
System.out.println(String.format("%10s %s","Prueba","Resultado"));
probarAF("1."); probarAF("1,0."); probarAF("1,1."); probarAF("1,0,0."); probarAF("1,0,1."); probarAF("1,1,0."); probarAF("1,1,1.");
System.out.println();
probarAF("1"); probarAF("10."); probarAF("0,1,1."); probarAF("1#1,1."); probarAF("1,0,1"); probarAF("1,0,1,1,1."); probarAF("0,1."); probarAF("1.0.");
probarAF("HOla!");
System.out.println();
probarAF("0,0,1."); probarAF("0,1,0."); probarAF("0,1,1."); probarAF("1,0,1."); probarAF("1,1,0."); probarAF("1,1,1.");
}
}