Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214

    [JAVA] modifica stringa

    Devo modificare la stringa "C:\cartella\altracartella\" in "C:\\cartella\\altracartella\\".
    Ho provato con Stringa.replaceAll("\","\\") ma mi dà problemi. Come posso fare?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Hai 2 possibilità: o utilizzo il metodo replaceAll utilizzando come primo parametro una espressione regolare, oppure ti costruisci un codice a mano, come questo:
    codice:
    String miaStringa = "C:\\cartella\\altracartella\\";
    char [] tmp = miaStringa.toCharArray();
    String nuova = "";
    int indice = miaStringa.lastIndexOf("\\");
    for (int i=0; i<tmp.length; i++) {
       if (tmp[i] == '\\') {
          nuova += "\\";
       }
       nuova += tmp[i];
    }
    Ora in nuova hai la nuova stringa modificata.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    mi chiedo a cosa ti serva la variabile indice?!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da teuccio
    mi chiedo a cosa ti serva la variabile indice?!
    A nulla
    E' rimasta lì perchè mi sono dimenticato di toglierla da un codice precedente. :maLOL:


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    nelle stringhe

    \

    è un carattere di escape, per cui per cambiare tutte le "\" in "\\" dovrai fare il replaceAll di "\\" con "\\\\", credo
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214
    Originariamente inviato da Andrea1979
    nelle stringhe

    \

    è un carattere di escape, per cui per cambiare tutte le "\" in "\\" dovrai fare il replaceAll di "\\" con "\\\\", credo
    ma poi ottengo c:\\\cartella (eccetera). Se provo a mettere "\\\" mi dà lo stesso errore di "\". Si può utilizzare il codice ASCII di "\"? Qualcuno mi sa dire qual è?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Andrea1979
    nelle stringhe

    \

    è un carattere di escape, per cui per cambiare tutte le "\" in "\\" dovrai fare il replaceAll di "\\" con "\\\\", credo
    Purtroppo no: il primo parametro del metodo replaceAll() non è la stringa da cercare, ma l'espressione regolare che denota la stringa da cercare. Di conseguenza, questa istruzione
    codice:
    String nuova = miaStringa.replaceAll("\\", "\\\\");
    genera l'eccezione PatternSyntaxException, in quanto la stringa "\\" non denota una espressione regolare valida.
    Originariamente inviato da bobix78
    ma poi ottengo c:\\\cartella (eccetera). Se provo a mettere "\\\" mi dà lo stesso errore di "\". Si può utilizzare il codice ASCII di "\"? Qualcuno mi sa dire qual è?
    Se la classe String prevedesse un metodo replaceAll() con la seguente firma
    codice:
    public String replaceAll(String oldString, String newString)
    
    oldString: La sottostringa da cercare
    newString: La sottostringa da sostituire a oldString
    allora la soluzione proposta da Andrea1979 sarebbe corretta e non otterresti una stringa con 3 caratteri '\\', in quanto la prima servirebbe per quotare la seconda e Java interpreterebbe in modo corretto il carattere. Purtroppo tale metodo non esiste.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ok, qui discuto del sesso degli angeli, ma siccome avevo due minuti, voilà

    codice:
    import java.io.File;
    
    public class stringSubs {
      
      static File f = new File("stringSubs.class");
      static String dummy = f.getAbsolutePath();
      
      public static String myReplaceAll(String a, String b) {
        String temp = dummy;
        int i = -2;
        while (i != -1) {
          i+=2;
          i = temp.indexOf(a, i);
          temp = (i != -1 ? temp.substring(0, i) + b + (i + 1 < temp.length() ? temp.substring(i+1) : "") : temp);      
        }
        return temp;
      }
      
      public static void main(String args[]) {
        System.out.println(dummy);
        System.out.println(myReplaceAll("\\", "\\\\"));
      }
    }
    Aspettando con ansia una prossima release di Java che preveda il replaceAll di lele
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Andrea1979
    Aspettando con ansia una prossima release di Java che preveda il replaceAll di lele
    PS: Io non ne ho mai sentito il bisogno... anche perchè, come postato poco più su, me lo costruisco a mano, se voglio, un metodo simile


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.