RISOLTO Java (not equal)

Stato
Discussione chiusa ad ulteriori risposte.

petrusic

Utente Attivo
227
20
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
HDD
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
OS
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
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 Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
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..
 

icox

Utente Attivo
497
246
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.
 

Jpr0va

Nuovo Utente
32
8
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.
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,918
11,562
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
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

Utente Attivo
227
20
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
HDD
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
OS
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
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 Èlite
6,440
5,091
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

Utente Attivo
227
20
CPU
AMD Athlon - X86_64
Scheda Madre
Acer RS780HVF
HDD
SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
RAM
n.2 DDR" per 2GB
OS
fedora 28 Mate, Ubuntu Mate, Linux Mint 19
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.
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!