Utilizar un signo de interrogación como String en android
Estoy tratando de usar un signo de interrogación como una variable para una cadena.
He intentado…
- Manejo de spoiler BBcode Android
- Cómo validar el formato de número de teléfono
- Número de tarjeta de validación de la validación de la expresión regular
- Formato de registro de registro de Android c2dm
- ¿Qué significa * + en regexp
strings.xml <string name="questionMark">\?</string> .class String questionMark; questionMark = getResources().getString(R.string.questionMark); String delim4 = (questionMark);
Esto provoca un error de regex cierre fource.
y
String delim4 = (\?);
Esto obtiene un error Secuencia de escape no válida (los válidos son \ b \ t \ n \ f \ r \ "\ '\)
y también
He intentado poner 2 barras invertidas delante de él
String delim4 =(\\?) System.out.println("delim "+ delim4);
Pero eso sólo escapa de la segunda barra y, a veces la fuerza se cierra también. La salida para eso fue
Delim
¿Puede cualquier decirme cómo poner en el signo de interrogación como la cadena. Lo estoy usando como variable para escupir una cadena. La división de String Im no se puede cambiar.
Ayuda plz
Editar código de división añadido
if (FinishedUrl.contains(questionMark)){ String delim3 = (".com/"); String[] parts3 = FinishedUrl.split(delim3); String JUNK3= parts3[0]; String fIdStpOne = parts3[1]; String fIdStpTwo = fIdStpOne.replaceAll("=#!/",""); String delim4 = (questionMark); String[] parts4 = fIdStpTwo.split(delim4); String fIdStpThree= parts3[0]; String JUNK4 = parts3[1]; FId = fIdStpThree; }
- Expresión regular en Android para el campo de contraseña
- Java Regex lookahead toma demasiado tiempo
- Diferencia de regex de Java y Android
- Java.util.regex.PatternSyntaxException en Android
- Regex palabra entera
- ¿Cómo busco una lista de correo electrónico para un formato determinado?
- Grupos java regex con android
- RegEx para encontrar URL en HTML tarda 25 segundos en Java / Android
Como señaló el usuario laalto
Es un meta-carácter en regex. Usted debe trabajar alrededor de eso.
Vamos a ver lo que está sucediendo aquí. En primer lugar, algunas reglas básicas:
`?` is not a special character in Java `?` is a reserved character in regex
Esto implica:
String test = "?"; // Valid statement in java, but illegal when used as a regex String test = "\?"; // Illegal use of escape character
¿Por qué la segunda afirmación es incorrecta? Porque estamos tratando de escapar de un personaje que no es especial (en Java). Muy bien, volveremos a esto.
Ahora, para el método de split(String)
, tenemos que escapar de la ?
– siendo un meta-carácter en regex. Por lo tanto, necesitamos \?
Para el regex .
Volviendo a la cadena, ¿cómo conseguimos \?
? Tenemos que escapar de la \(backslash)
– no el signo de interrogación!
Aquí está el flujo de trabajo:
String delim4 = "\\?";
Esta afirmación nos da \?
– escapa de la \(backslash)
.
String[] parts4 = fIdStpTwo.split(delim4);
Esto nos permite usar \?
Como un regex en el método split()
. Desde delim4
se está pasando como un regex, \?
Se utiliza como ?
. Aquí, el prefijo \
se utiliza para escapar ?
.
Sus observaciones:
String delim4 = (\?);
Esto obtiene un error Secuencia de escape no válida (los válidos son \ b \ t \ n \ f \ r \ "\ '\)
He cubierto esto arriba. ¿Te estás escapando ?
En el nivel java – pero no es un carácter especial y no necesita escapar – de ahí el error.
String delim4 =(\\?) System.out.println("delim "+ delim4);
Pero eso sólo escapa de la segunda barra y, a veces la fuerza se cierra también. La salida para eso fue
Delim
Esto es lo que queremos. Es más fácil pensar en esto como un proceso en dos etapas. La primera etapa trata de colocar con éxito una \(backslash)
delante del ?
. En la segunda etapa, regex encuentra que el ?
Ha sido prefijado por un \
y utiliza ?
Como un literal en lugar de un meta-carácter.
Y aquí es cómo puede colocar el regex en su res / values / strings.xml:
<string name="questionMark">\\?</string>
Por cierto, hay otra opción – no es algo que uso regularmente en estos días – split()
funciona muy bien.
Puede utilizar StringTokenizer
que funciona con delimitadores en lugar de regex. Afaik, cualquier literal puede ser utilizado como un delimitador. Por lo tanto, puede utilizar ?
directamente:
StringTokenizer st = new StringTokenizer(stringToSplit, "?"); while (st.hasMoreTokens()) { // Use tokens String token = st.nextToken(); }
La manera más fácil es citar o backslash ellos:
<string name="random">"?"</string> <string name="random">\?</string>
El código final.
String startDelim = ("\\?"); String realDelim = (startDelim); String[] parts4 = fIdStpOne.split(realDelim); String fIdStpTwo= parts4[0]; String JUNK4 = parts4[1];
Normalmente lo pondrías literalmente, como
String q = "?";
Sin embargo, usted dice que lo está utilizando para dividir una cadena. split()
toma una expresión regular y ?
Es un metacaracter en un regex. Para escapar de ella, agregue una barra invertida delante. La barra invertida es un carácter especial en los literales de cadenas Java, por lo que también se debe escapar:
String q = "\\?";
- Mapa en línea sin conexión y en línea con mapa de calle abierto.
- Mostrar valores de eje dentro de las barras BarChart de la biblioteca MPAndroidChart