Desea convertir cadenas aleatorias en Java identificadores válidos. Según the Java Language Specification, §3.8, la definición de un identificador es la siguiente:
Identifier:
IdentifierChars pero no una palabra clave o BooleanLiteral o NullLiteral
IdentifierChars:
JavaLetter
IdentifierChars JavaLetterOrDigit
JavaLetter:
cualquier carácter Unicode que es una carta de Java
JavaLetterOrDigit:
cualquier carácter Unicode que es una carta o dígitos de Java
A Lo único que tienes que hacer es dar un paso adelante en tu información y reemplazar cualquier carácter no válido por uno válido (p. guión bajo) o eliminarlo por completo. Java incluso proporciona métodos en la clase Character
que le indica si un determinado carácter es JavaLetter o JavaLetterOrDigit: isJavaIdentifierStart()
y isJavaIdentifierPart
. (Esto es mucho más fácil que tratar de excluir caracteres inválidos porque el conjunto de caracteres válidos es pequeño y el conjunto de caracteres inválidos es enorme.)
Al final, recuerde asegurarse de que su resultado no comience con un dígito a no queda con una palabra clave o literal. Si las colisiones son posibles y no deseadas, puede agregar números a sus resultados según sea necesario para obtener valores únicos.
¿Cuáles son los posibles contenidos de la cadena de entrada? ¿Solo alfanuméricos, signos de puntuación y espacios? Todo en Unicode? – Pops
Sin imponer reglas en la entrada, creo que encontrará colisiones (es decir, asignaciones de varios a uno). Dependiendo de su aplicación, esto puede o no importar. – jpm
Puede tratar de recorrer la cadena y anexar a StringBuilder si es un carácter válido para un nombre de variable Java. El desafío que podría tener es la duplicación de variables, por lo que es posible que desee realizar un seguimiento de lo que ha usado y agregar números si es necesario. – JustinKSU