Visualizzazione dei risultati da 1 a 4 su 4

Discussione: ricerca sotto-stringhe

  1. #1
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500

    ricerca sotto-stringhe

    Ciao a tutti ragazzi, mi serviva un aiuto per questo problema di java; devo riuscire a trovare alcuni campi in un pacchetto Sip che alla fine è rappresentato da una semplice stringa:
    codice:
    SIP/2.0 401 Unauthorized
    From: <sip:test@192.168.1.107>
    To: <sip:test@192.168.1.107>;tag=as1a02a93a
    Call-ID: 2537450899
    CSeq: 1 REGISTER
    User-Agent: Asterisk PBX
    Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
    WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="2a78aad2"
    Content-Length: 0
    in questa stringa (immaginate che ad ogni accapo c'è un \n ovviamente) mi serve trovare il valore di realm e di nonce. Avevo pensato ad uno split della stringa ma non riesco a trovare una regexp adatta...non essendo esperto di java non so se esiste una specie di funzione tipo C che permette di leggere da una stringa come la "sscanf()".
    Altrimenti si può impostare una semplice ricerca tramite vari if testando carattere per carattere fino a quando non si trova la sequenza desiderata...più o meno così:
    codice:
    public String find_nonce ( String tmp ) {
    		
    		String nn = new String();
    		int i=0;
    		while ( 1 == 1 ) {
    			if ( tmp.charAt(i) == 'n' ) {
    				i++;
    				if ( tmp.charAt(i) == 'o' ) {
    					i++;
    					if ( tmp.charAt(i) == 'n' ) {
    						i++;
    						if ( tmp.charAt(i) == 'c' ) {
    							i++;
    							if ( tmp.charAt(i) == 'e' ) {
    								System.out.println("Trovato");
    								i=i+2;
    								while ( tmp.charAt(i) != '\r' ) {
    									nn = nn + tmp.charAt(i);
    									i++;
    								}
    								return nn;
    							}
    							i++;
    						}
    						i++;
    					}
    					i++;
    				}
    				i++;
    			}
    			i++;
    		}
    
    	}
    però mi sembra una cosa mooolto grezza...molto C-style...e poi quel ciclo while() impostato in quel modo...non mi piace proprio!!
    Se qualcuno ha una idea migliore...grazie mille ragazzi...
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  2. #2
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    A me viene in mente di fare tanti split...
    codice:
    		String s = "SIP/2.0 401 Unauthorized"+
    					"From: <sip:test@192.168.1.107>"+
    					"To: <sip:test@192.168.1.107>;tag=as1a02a93a"+
    					"Call-ID: 2537450899"+
    					"CSeq: 1 REGISTER"+
    					"User-Agent: Asterisk PBX"+
    					"Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY"+
    					"WWW-Authenticate: Digest algorithm=MD5, realm=\"asterisk\", nonce=\"2a78aad2\""+
    					"Content-Length: 0";
    		
    		String[] arr = s.split("realm=\"");
    		String[] arr2 = arr[1].split("\", ");
    		String realmValue = arr2[0];
    		String[] arr3 = arr2[1].split("nonce=\"");
    		String[] arr4 = arr3[1].split("\"Content");
    		String nonceValue = arr4[0];
    		
    		System.out.println(realmValue+" "+nonceValue);

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  3. #3
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    ti ringrazio tanto della risposta, ho provato il codice e funge, anche se mi stampa qualcosa che non dovrebbe:
    codice:
    realm=asterisk nonce=643cbfdc" 
    Content-Length:
    nella string del nonce viene incluso anche in Content-Length....provo in qualche modo a eliminarlo...non dovrebbe essere difficile...tipo facendo una split con il carattere " esce subito penso!
    grazie ancora comunque!
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  4. #4
    Prova così allora

    codice:
        public static void main(String[] args) {
    		String s = "SIP/2.0 401 Unauthorized"+
    					"From: <sip:test@192.168.1.107>"+
    					"To: <sip:test@192.168.1.107>;tag=as1a02a93a"+
    					"Call-ID: 2537450899"+
    					"CSeq: 1 REGISTER"+
    					"User-Agent: Asterisk PBX"+
    					"Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY"+
    					"WWW-Authenticate: Digest algorithm=MD5, realm=\"asterisk\", nonce=\"2a78aad2\""+
    					"Content-Length: 0";
    		
    		String realm = s.split("realm=")[1];
    		StringBuffer output = new StringBuffer();
    		int i = 0;
    		while( i < realm.lastIndexOf("Content-Length") ){
    			output.append(realm.charAt(i));
    			i++;
    		}
    		System.out.println("realm=" + output);
        }
    Oppure in modo più semplice

    codice:
        public static void main(String[] args) {
    		String s = "SIP/2.0 401 Unauthorized"+
    					"From: <sip:test@192.168.1.107>"+
    					"To: <sip:test@192.168.1.107>;tag=as1a02a93a"+
    					"Call-ID: 2537450899"+
    					"CSeq: 1 REGISTER"+
    					"User-Agent: Asterisk PBX"+
    					"Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY"+
    					"WWW-Authenticate: Digest algorithm=MD5, realm=\"asterisk\", nonce=\"2a78aad2\""+
    					"Content-Length: 0";
    		
    		StringBuffer output = new StringBuffer();
    		int i = s.lastIndexOf("realm=");
    		while( i < s.lastIndexOf("Content-Length") ){
    				output.append(s.charAt(i));
    			i++;
    		}
    		System.out.println(output);
        }

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.