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

    [REGEX] Formato non corretto [RISOLTO]

    Ciao io ho una stringa formata da un formato che si ripete. Ovvero

    <Stringa>;<numero con virgola>;<numero con virgola>;<numero intero>
    Questo formato si ripete N volte separato da un Pipe.

    Quindi il formato viene fuori
    <Stringa>;<numero con virgola>;<numero con virgola>;<numero intero>|<Stringa>;<numero con virgola>;<numero con virgola>;<numero intero>|<Stringa>;<numero con virgola>;<numero con virgola>;<numero intero>|<Stringa>;<numero con virgola>;<numero con virgola>;<numero intero>

    Quello che mi serve è, per ogni occorrenza, estrarre i 4 dati separati così che poi possa usarli.


    E il codice l'ho fatto così
    codice:
    String content = <stringa da analizzare>;
    Pattern pattern = Pattern.compile("([a-zA-Z]+);(\\d+\\.\\d+);(\\d+\\.\\d+);(\\d+)");
    Matcher matcher = pattern.matcher(content);
    
    while (matcher.find())
    {
    	String occorrenza = matcher.group();
    	Matcher match2 = pattern.matcher(occorrenza)
    	if (match2.matches())
    	{
    		String campo1 = match2.group(0);
    		double campo2 = Double.parseDouble(match2.group(1));
    		double campo3 = Double.parseDouble(match2.group(2));
    		int campo4 = Integer.parseInt(match2.group(3));
    		.... altro codice per gestire i campi trovati....
    	}
    }
    Ho risolto da solo. C'era un problema con le parentesi per delimitare i gruppi

  2. #2
    Puoi risolvere molto più semplicemente senza espressioni regolari , utilizzando il metodo split della classe String:

    Codice PHP:
    String content "ESEMPIO_1;12.22;123.20;15|ESEMPIO_2;12.22;123.20;15";
    String[] pipeTokens content.split("|");
    for(
    int i=0i<pipeTokens.length;i++){
         
    String[] values pipeTokens[i].split(";");
         for(
    int k=0k<values.lengthk++){
              
    System.out.println(values[k]);
         }

    In alternativa dai uno sguardo alla classe StringTokenizer di java.

    Al mio segnale... scatenate l'inferno!

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da R@ve M@ster
    [...]

    In alternativa dai uno sguardo alla classe StringTokenizer di java.

    No meglio evitare StringTokenizer:

    http://java.sun.com/javase/6/docs/ap...Tokenizer.html

    subito sotto l'output dell'esempio di codice. La classe non viene dismessa completamente solo per retro-compatibilità, ma a tutti gli effetti meglio utilizzare split di String o direttamente le RegEx se niente niente più complesso.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    Alla fine ho fatto in questo modo e funziona senza problemi

    codice:
    String content = <stringa da analizzare>;
    Pattern pattern = Pattern.compile("([a-zA-Z]+);(\\d+\\.\\d+);(\\d+\\.\\d+);(\\d+)");
    Matcher matcher = pattern.matcher(content);
    while (matcher.find())
    {
    	String stringa = matcher.group(1); 
    	String numeroconvirgola = matcher.group(2); 
    	String numeroconvirgola = matcher.group(3); 
    	String numerointero = matcher.group(4);
    	... codice per analizzare i 4 campi....
    }

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.