[VB.NET] Da maiuscolo a minuscolo

giovedì 06 agosto 2009 - 22.07

marco.santilli Profilo | Junior Member

Ho una funzione per trasformare un Nome Cognome da maiuscolo a minuscolo per lasciando la prima lettera in maiscolo

Però ha un problema: se un nome ha l'apostrofo lui me lo elimina

Vi posto il codice, sapete aiutarmi?
Potete suggerirmi anche una nuova funzione

Ciao e grazie

Public Function GetNomeProprio(ByVal nome As String) As String
Dim spazioPrima As Boolean = True
Dim sb As New System.Text.StringBuilder(nome.Length)
For Each c As Char In nome
If Char.IsLetter(c) Then
If spazioPrima Then
c = Char.ToUpper(c)
Else
c = Char.ToLower(c)
End If
sb.Append(c)
spazioPrima = False
ElseIf Char.IsWhiteSpace(c) Then
If Not spazioPrima Then
sb.Append(" "c)
End If
spazioPrima = True
End If
Next
Return sb.ToString()
End Function

luxsor Profilo | Guru

Ciao Marco,
aggiungi un blocco IF così:

Public Function GetNomeProprio(ByVal nome As String) As String
Dim spazioPrima As Boolean = True
Dim sb As New System.Text.StringBuilder(nome.Length)
For Each c As Char In nome

If c = "'" Then
sb.Append(c)
ElseIf Char.IsLetter(c) Then
If spazioPrima Then
c = Char.ToUpper(c)
Else
c = Char.ToLower(c)
End If
sb.Append(c)
spazioPrima = False
ElseIf Char.IsWhiteSpace(c) Then
If Not spazioPrima Then
sb.Append(" "c)
End If

spazioPrima = True
End If
Next
Return sb.ToString()
End Function




------------------------
Luxsor

JOK Profilo | Newbie

non ti conviene prenderti la stringa intera e fare un tolower() ?
da li poi splitti il nome e il cognome in modo che hai 2 stringhe e di quelle 2 cambi solamente la prima lettere con un toUpper().
ciauz

aiedail92 Profilo | Expert

Ciao

Puoi usare i metodi del namespace Globalization, in particolare la classe TextInfo e la funzione ToTitleCase():

Dim before As String() = New String() {"nome cognome", "prova con 'apostrofo", "pippo PLUTO"} Dim after As String() = New String(before.Length - 1) {} Dim ita As TextInfo = CultureInfo.GetCultureInfo("it", "it").TextInfo For i As Integer = 0 To before.Length - 1 after(i) = ita.ToTitleCase(before(i).ToLower) Next i Dim sb As New StringBuilder() For i As Integer = 0 To after.Length - 1 sb.Append(before(i)) sb.Append(" --> ") sb.AppendLine(after(i)) Next i MessageBox.Show(sb.ToString)

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5