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…

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; } 

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 = "\\?"; 
  • Cómo utilizar la expresión regular en android
  • Android / Java regex match Más signo
  • cómo encontrar si el texto de entrada es una url usando regex
  • "Secuencia de escape no válida (válidos son \ b \ t \ n \ f \ r \" \ '\\) "error de sintaxis
  • Regex <img> Análisis de etiquetas con src, width, height
  • Divide la cadena en la última aparición del carácter
  • Expresión regular para eliminar todos los caracteres no imprimibles
  • Java no funciona con regex \ s, dice: inválido secuencia de escape
  • División de la cadena con RegEx en Android
  • Expresión regular de Android para obtener enlaces de la fuente de la página web
  • Matcher.replaceAll () y String.replaceAll () no parecen funcionar en Galaxy S 6
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.