Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Java] Espressioni Regolari: Estrazione posizione prima occorrenza

    Salve a tutti,
    devo recuperare la posizione della prima occorrenza di un carattere (o "/") all'interno di una stringa:

    codice:
    Es.
    12/A => 2
    12 => 0
    A => 0
    2A => 1
    Per fare questo ho utilizzato il seguente codice:

    codice:
    		String expression = "[a-zA-Z/]+";
    		String inputStr = "AA";
    		
                    // Interno intero
    		Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    		Matcher matcher = pattern.matcher(inputStr);
    	
    		if(matcher.find() && matcher.start() > 0 ) {
    		
    		       Long internoIntero = Long.getLong(inputStr.subSequence(0,  matcher.start()).toString());
    		
                            interno.setInternoIntero(internoIntero);
    				
    		 }
    Solo che non entra mai nell'if dove c'è il matcher!!! Ho provato diversi valori per inputStr...non solo "AA" :P

    Dove sbaglio???

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

    Re: [Java] Espressioni Regolari: Estrazione posizione prima occorrenza

    Originariamente inviato da Djack82
    devo recuperare la posizione della prima occorrenza di un carattere (o "/") all'interno di una stringa:
    Allora la regex sarebbe "[a-zA-Z/]" senza il +. Se il primo find() dà true vuol dire che ha trovato la prima occorrenza. L'indice lo hai da start().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Continua a non trovare niente!

    Non riesco proprio a capire dove sta l'errore!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Djack82
    Continua a non trovare niente!

    Non riesco proprio a capire dove sta l'errore!
    codice:
    import java.util.regex.*;
    
    public class Prova {
        public static void main(String[] args) {
            System.out.println(trovaIndice("12/A"));    // 2
            System.out.println(trovaIndice("12"));      // -1
            System.out.println(trovaIndice("A"));       // 0
            System.out.println(trovaIndice("2A"));      // 1
        }
    
        public static int trovaIndice(String inputStr) {
            Pattern pattern = Pattern.compile("[a-z/]", Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(inputStr);
    
            if (matcher.find()) {
                return matcher.start();
            }
    
            return -1;
        }
    }
    E come vedi, tra l'altro, sarebbe anche più logico e sensato ritornare un valore apposito (-1 tipicamente) per indicare "non trovato".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Risolto! Grazie!!!

    Ho tolto "A-Z" dall'espessione regolare!!!

    Immagino che al matcher non piacesse insieme all'opzione Pattern.CASE_INSENSITIVE.

    Cmq, grazie!



    Edit: Volevo mettere "RISOLTO" al titolo ma non è più possibile!

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.