Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102

    [JAVA] Utilizzo RegEx Semplici - Dividere due campi

    Ciao a tutti io ho questo semplice problema, ma non avendo mai utilizzato le RegEx mi trovo in difficoltà a costruire il pattern

    La stringa è l'unione di due coordinate in questo modo

    9.18189,45.45519

    Il pattern da costruire quindi dovrebbe risultare
    <numero>,<numero>

    A me serve avere i due numeri separati per inserirli in due variabili double.
    Potete aiutarmi? Grazie

    Dovrebbe risultare una roba del genere
    codice:
    String coordinate = "9.18189,45.45519";
    Pattern pattern = Pattern.compile(<pattern da costruire>);
    if (pattern.matcher(coordinate).matches())
    {
    	String[] tokens = pattern.split(coordinate);
    	super.setLongitude(Double.parseDouble(tokens[x]));
    	super.setLatitude(Double.parseDouble(tokens[y]));
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Il discorso Regular Expression è, a mio avviso, molto interessante e vale la pena soffermarvisi anche se non se ne ha spesso necessità. Venendo subito al tuo problema, il pattern è molto semplice
    codice:
    "\\,"
    Il carattere "virgola" è considerato un carattere speciale nella dichiarazione di un pattern, per cui va "escapato", ma l'escape a sua volta va "escapato" in quanto esso stesso carattere speciale.

    Nelle API, trovi -strano a dirsi- un bel po' di materiale a proposito della compilazione di pattern e del significato di vari caratteri. Ciao.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Utilizzo RegEx Semplici - Dividere due campi

    Originariamente inviato da Pegasys
    codice:
    String coordinate = "9.18189,45.45519";
    Pattern pattern = Pattern.compile(<pattern da costruire>);
    if (pattern.matcher(coordinate).matches())
    {
    	String[] tokens = pattern.split(coordinate);
    }
    Se definisci un pattern per "matchare" l'intera stringa (che è <numero>,<numero>) non puoi ovviamente riusare quello stesso pattern a mo' di "separatore" per lo split!!

    O usi direttamente split() di String specificando la "," come separatore (ed è tutto qui), oppure definisci un Pattern che identifica 2 gruppi, poi ottieni il Matcher e se il suo matches() dà true allora prendi i due gruppi (che saranno i due numeri) con group(n).

    Originariamente inviato da Andrea1979
    Il carattere "virgola" è considerato un carattere speciale nella dichiarazione di un pattern, per cui va "escapato"
    No, la virgola non è speciale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    Grazie ad entrambi per la risposta. Lo so che in questo caso è molto più semplice usare un banale String.split(",") ma volevo vedere come si usano le Regex.

    Ho sempre voluto imparare ad usarle ma non ho mai trovato una guida decente.

    Al momento ho fatto una cosa molto spiccia.
    codice:
    String[] split = coordinate.split(",");
    super.setLatitude(Double.parseDouble(split[0]));
    super.setLongitude(Double.parseDouble(split[1]));
    Come posso usare un pattern per verificare la corretta sintassi? <numero>,<numero>

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

    Re: Re: [JAVA] Utilizzo RegEx Semplici - Dividere due campi

    Originariamente inviato da andbin
    [...]
    Originariamente inviato da Andrea1979
    Il carattere "virgola" è considerato un carattere speciale nella dichiarazione di un pattern, per cui va "escapato"
    No, la virgola non è speciale.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    Come posso usare un pattern per verificare la corretta sintassi? <numero>,<numero>

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Pegasys
    Come posso usare un pattern per verificare la corretta sintassi? <numero>,<numero>
    Non hai precisato molto sul formato generale, quindi faccio io la supposizione che in un numero ci debbano essere 1...N cifre intere e 1....N cifre decimali.

    String pattern = "(\\d+\\.\\d+),(\\d+\\.\\d+)";

    \d (\\d nella stringa) indica 1 digit
    + indica 1 o più occorrenze

    Appena hai un Matcher e hai usato il suo matches() e verificato che corrisponde, allora il primo gruppo tra ( ) lo prendi con matcher.group(1) e l'altro con group(2)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    Il codice risultante quindi diventa
    codice:
    		Pattern pattern = Pattern.compile("(\\d+\\.\\d+),(\\d+\\.\\d+)");
    		Matcher matcher = pattern.matcher(coordinateIntere);
    		
    		if (matcher.matches())
    		{
    			double latitude = Double.parseDouble(matcher.group(1));
    			double longitude = Double.parseDouble(matcher.group(2));
    			setLatitude(latitude);
    			setLongitude(longitude);
    		}
    E funziona!

    Grazie a tutti per l'aiuto

    P.S. "\\." che sarebbe "\." cosa indica?
    EDIT: Mi rispondo da solo. Il carattere "." (punto) è una hotkey per le regex, visto che indica qualsiasi carattere. Se si vuole indicare esattamente il carattere "." bisogna usare l'escape

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.