Autore Topic: replaceall con \ (Backslash) da errore.  (Letto 666 volte)

Offline Matti111

  • Utente junior
  • **
  • Post: 68
  • Respect: +11
    • Mostra profilo
    • Ad Banners
  • Dispositivo Android:
    Nokia Lumia 800
  • Play Store ID:
    Ronca
  • Sistema operativo:
    Windows 7
replaceall con \ (Backslash) da errore.
« il: 12 Gennaio 2012, 10:46:05 CET »
0
Ciao a tutti,
ho provato ad utilizzare la funzione replaceall in una stringa. Il mio intento è quello di togliere tutti i Backslash "\".

Questo è il mio codice:
Codice: [Seleziona]
nome[i-1]=nome[i-1].replaceAll("\\", "");

c'è il doppio Backslash ma dovrebbe essere corretto.

Comunque quando prova ad eseguirmi la funzione mi da errore.

Di seguito posto il logcat:

Codice: [Seleziona]
01-12 10:39:30.019: E/MapActivity(22551): Couldn't get connection factory client
01-12 10:39:31.439: E/AndroidRuntime(22551): FATAL EXCEPTION: AsyncTask #1
01-12 10:39:31.439: E/AndroidRuntime(22551): java.lang.RuntimeException: An error occured while executing doInBackground()
01-12 10:39:31.439: E/AndroidRuntime(22551):         at android.os.AsyncTask$3.done(AsyncTask.java:200)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.lang.Thread.run(Thread.java:1019)
01-12 10:39:31.439: E/AndroidRuntime(22551): Caused by: java.util.regex.PatternSyntaxException: Syntax error U_REGEX_BAD_ESCAPE_SEQUENCE near index 1:
01-12 10:39:31.439: E/AndroidRuntime(22551): \
01-12 10:39:31.439: E/AndroidRuntime(22551):  ^
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.util.regex.Pattern.compileImpl(Native Method)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.util.regex.Pattern.compile(Pattern.java:400)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.util.regex.Pattern.<init>(Pattern.java:383)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.util.regex.Pattern.compile(Pattern.java:374)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.lang.String.replaceAll(String.java:1963)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at com.mattia.bike.lista_fermate$WebRicerca.doInBackground(lista_fermate.java:260)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at com.mattia.bike.lista_fermate$WebRicerca.doInBackground(lista_fermate.java:1)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-12 10:39:31.439: E/AndroidRuntime(22551):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-12 10:39:31.439: E/AndroidRuntime(22551):         ... 4 more

Qualche idea del perchè dell'errore?
con un altro carattere funziona, ad esempio:
Codice: [Seleziona]
nome[i-1]=nome[i-1].replaceAll("a", "A");va senza problemi.

Grazie
Mattia


RISOLTO

Non ci crederete, ma ci vanno 4 backslash

Codice: [Seleziona]
nome[i-1]=nome[i-1].replaceAll("\\\\", "");
così va :D
« Ultima modifica: 12 Gennaio 2012, 10:49:23 CET da Matti111 »
Tutto quello che c'è da sapere sul mobile advertising
AdBanner

Offline stefano@BL

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
    • HappyBasket - Offerte speciali
  • Dispositivo Android:
    Wildfire
Re:replaceall con \ (Backslash) da errore.
« Risposta #1 il: 12 Gennaio 2012, 11:36:56 CET »
0
Ciao,
tutto ha un senso :)
Nella regular expression per indicare il carattere slash (che è un carattere speciale) devi mettere davanti uno slash, quindi diventano 2.
Dopo di chè nel codice java, ogni slash all'interno di una stringa (che anche qui è un carattere speciale) deve essere inserito con davanti un altro slash.
In totale quindi diventano 4
ciao!
La mia app Android: HappyBasket http://happy-basket.appspot.com , crea le liste della spesa, inserisci i prezzi delle offerte speciali e verifica se sono davvero speciali