Italian regex.split

Fulvio75

Well-Known Member
Licensed User
Ho notato un probabile "malfunzionamento" di Regex.Split, ovvero:

Dim components() As String
components = Regex.Split("", "1234")

se non metto il pattern la numerazione di components ha 5 indici e il primo che è lo zero è vuoto.
components(0)=vuoto
components(1)=1
components(2)=2
components(3)=3
components(4)=4

non dovrebbe essere:

components(0)=1
components(1)=2
components(2)=3
components(3)=4
 

Filippo

Expert
Licensed User
Longtime User
Ho notato un probabile "malfunzionamento" di Regex.Split, ovvero:

Dim components() As String
components = Regex.Split("", "1234")

se non metto il pattern la numerazione di components ha 5 indici e il primo che è lo zero è vuoto.
components(0)=vuoto
components(1)=1
components(2)=2
components(3)=3
components(4)=4

non dovrebbe essere:

components(0)=1
components(1)=2
components(2)=3
components(3)=4
Se vuoi un risultato del genere, allora dovresti scrivere così:
B4X:
    Dim components() As String
    components = Regex.Split(",", "1,2,3,4")
    
    For i = 0 To components.Length - 1
        Log("components-" & i & "=" & components(i))
    Next

Log:
components-0=1
components-1=2
components-2=3
components-3=4
 

MarcoRome

Expert
Licensed User
Longtime User
??

1701687828330.png
 

Sagenut

Expert
Licensed User
Longtime User
Forse è più una questione di versione Android del telefono e/o di una strana implementazione da parte di alcuni produttori.
E' comunque una informazione utile, perchè potrebbe portare a bug segnalati da utenti/clienti che non si riescono a replicare.
Io ottengo 4 elementi sia sul mio cellulare che sull'emulatore su cui ho fatto la prova.
 

LucaMs

Expert
Licensed User
Longtime User
Ho notato un probabile "malfunzionamento" di Regex.Split, ovvero:

Dim components() As String
components = Regex.Split("", "1234")

se non metto il pattern la numerazione di components ha 5 indici e il primo che è lo zero è vuoto.
components(0)=vuoto
components(1)=1
components(2)=2
components(3)=3
components(4)=4

non dovrebbe essere:

components(0)=1
components(1)=2
components(2)=3
components(3)=4
https://www.b4x.com/android/forum/threads/regex-b4a-b4j.157797/post-968727
 

MarcoRome

Expert
Licensed User
Longtime User
e si, stesso codice, comportamenti differenti.
Dipende dalla versione android.
su un dispositivo reale con:
Android 8 ho i 5 valori ( errato )
Android 11 è corretto
Android 13 è corretto
 

MarcoRome

Expert
Licensed User
Longtime User
Risolto il mistero.
Come detto da Oliver

"...Il comportamento quando si ha a che fare con un modello di stringa vuoto è cambiato tra Java 7 e Java 8. A seconda della versione di Android, potresti avere a che fare con Java 6, 7 o 8. Questo non ha nulla a che fare con il JDK che usi in B4A per generare il tuo APK, ma con Java implementato in Android...."
"...Questo è il comportamento previsto per String#split per Java versione fino alla 7 ed è stato modificato in Java 8..."

Morale della favola, per questo caso particolare forse al posto tuo utilizzerei il seguente codice che funziona con tutte le Versioni:

B4X:
Dim input As String
    input = "1234"
    Dim components(input.Length) As String
    For i = 0 To components.Length - 1
        components(i) = input.CharAt(i)
        Log(components(i))
    Next
 

Fulvio75

Well-Known Member
Licensed User
Ho risolto, conto i caratteri della stringa:
strMatrice ha sempre 6 elementi

Dim str As String = "........"
Dim strMatrice(6) As String

For i = 0 To (str.Length-1)
strMatrice(i) =str.SubString2(i,i+1)
Next
 

Fulvio75

Well-Known Member
Licensed User
Come faccio a sapere se il testo contenuto un una label si visualizza tutto oppure no in base all'altezza impostata della label?
 

Filippo

Expert
Licensed User
Longtime User
Come faccio a sapere se il testo contenuto un una label si visualizza tutto oppure no in base all'altezza impostata della label?
Calcola l'altezza del testo e confrontala con l'altezza dell'etichetta.
 
Top