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.");
}
}