[Risolto] Java (not equal)

petrusic

Nuovo Utente
37
1
Hardware Utente
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
Hard Disk
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
Sistema Operativo
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
#1
Ho cercato di capire come eseguire un confronto fra due variabili di tipo String ed alla fine sono insoddisfatto di quello che sono riuscito ad ottenere, perchè la tecnica messa in pratica mi sembra farraginosa e pesante ai fini della stesura del codice.
Essendo str1 e str2 due stringhe da confrontare e, fermo restando che gli operatori ==, !=, <, >, <=, >=, non devono essere utilizzati nelle istruzioni di confronto, resta a carico del programmatore trovare l'insieme di istruzioni più semplici e veloci per conoscere la risposta al confronto
l'istruzione più semplice, trovata anche nelle guide sul linguaggio é
Codice:
if (str1Stri.equals (str2Stri)) { …
per tutte le altre non ho trovato un'indicazione simile, ed allora mi sono munito di "calma e gesso" e,
per verificare la disuguaglianza, ho scritto:
Codice:
    if (str1Stri.equals (str2Stri)) {
        …
    }
    else {    // seguito dal gruppo di istruzioni che gestiscono la condizione di disuguaglianza
     …
    }
ed è sopportabile, mentre per capire se: (str1 < str2) o (str1 > str2), ho trovato la soluzione seguente:
Codice:
       esito = str1.compareTo (str2);
        if (esito < 0) {
            System.out.println("variabile " + str1 + " < di " +str2);
        }
        else if (esito > 0) {
            System.out.println("variabile " + str1 + " > di " +str2);
        }
che mi sembra alquanto laboriosa.
Ecco allora la mia domanda: Ma non ci sono altri mezzi risolvono il confonto in maniera, direi, indolore dal punto di vista dell'impegno?
 

rodhellas

Utente Attivo
1,393
375
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
#2
perchè la tecnica messa in pratica mi sembra farraginosa e pesante ai fini della stesura del codice.
E perchè mai? son 6 righe di codice banalmente interpretabili..
 
#3
Se vuoi fare confronti tra stringhe/oggetti e' l'unico modo che hai, Java e' un linguaggio verboso (nel bene e nel male).
Puoi compattare il tutto usando un ternario, inserendo la compareTo direttamente nell'if o eventualmente (ri)definendo una tua compareTo... ma in ogni caso da qualche parte quelle istruzioni devi inserirle.
 
#4
L'unico modo per comparare due diverse stringe è il modo che hai precedentemente scritto te.
Se vuoi evitare di dover riscrivere ogni volta quelle operazioni potresti crearti una tua libreria con quei metodi già inseriti, ed utilizzarli ogni volta che ne hai la necessità.
Ma come detto da icox da qualche parte dovrai pur scriverle quelle istruzioni.
 
#5
Non capisco il senso della domanda:
date 2 stringhe s1 ed s2, esse o sono uguali, oppure s1 precede s2 in ordine lessicografico, oppure s1 segue s2.
I risultati possibili sono per forza 3 non è una questione di linguaggio di programmazione;
infatti compareTo restituisce 0 (uguali), -1 oppure +1. A carico del programmatore non c'è nulla, se non saper distinguere 3 interi.
Java:
String a = "pippo";
String b = "pluto";
int ris = a.compareTo(b);
if(ris == 0) System.out.println(a + " uguale a " + b);
else if(ris < 0 ) System.out.println(a + " precede " +b);
else System.out.println(a + " segue " + b);
 

petrusic

Nuovo Utente
37
1
Hardware Utente
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
Hard Disk
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
Sistema Operativo
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
#6
Se vuoi evitare di dover riscrivere ogni volta quelle operazioni potresti crearti una tua libreria con quei metodi già inseriti, ed utilizzarli ogni volta che ne hai la necessità.
/QUOTE]
Data la mia assoluta inesperienza sul linguaggio, speravo nella presenza di una classe già pronta che restituisse la sentinella valorizzata con 0, -1, +1, a seconda che (str1 = str2), (str1 < str2), str1> str2).
Visto invece che la verifica resta un compito a carico del codice utente, pensavo proprio a quello che mi suggerisci tu, cioè creare una libreria a mio uso e consumo, in cui generareuna prima classe con un gruppo di istruzioni simili a quelle riportate nell'esempio pubblicato nel mio messaggio d'apertura.
:thanks:
 

Andretti60

Utente Attivo
2,634
1,763
Hardware Utente
#7
In programmazione niente è indolore :)

Senza contare che stringhe letterali possono essere formate codificate non solo come ansii ma anche come in diversi formati Unicode che permettono la rappresentazione di caratteri non latini. I moderni linguaggi di programmazione ormai utilizzano tutti Unicode, per cui fare il confronto di due stringhe non è più banale e dipende dalla lingua usata. Per esempio, in tedesco le stringhe
Straße e Strasse sono la stessa cosa. Divertente vero?
 

petrusic

Nuovo Utente
37
1
Hardware Utente
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
Hard Disk
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
Sistema Operativo
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
#8
In programmazione niente è indolore :)

Senza contare che stringhe letterali possono essere formate codificate non solo come ansii ma anche come in diversi formati Unicode che permettono la rappresentazione di caratteri non latini. I moderni linguaggi di programmazione ormai utilizzano tutti Unicode, per cui fare il confronto di due stringhe non è più banale e dipende dalla lingua usata. Per esempio, in tedesco le stringhe Straße e Strasse sono la stessa cosa. Divertente vero?
Grazie per l'illuminazione. Non ci avevo pensato. Convengo perfettamente con la tua riflessione.
Però, vedi, in questo momento di studio non ho alcuna voglia di mettere in pratica la scienza di come rendere difficili le cose facili.
Quello che faccio è di mio esclusivo uso e, in questo momento, ripeto, non è il caso di complicarmi la vita.