Come si trasforma una stringa in una stringa PascalCase con C #?
-
27-10-2019 - |
Domanda
Ho un problema con il mio codice.Non so cosa sto sbagliando.Voglio che l'utente scriva qualche frase e quindi il programma dovrebbe dividere la frase scritta in singole parole dove uso ToUpper sui primi caratteri di ogni parola in array e poi unisco di nuovo insieme senza spazi.
il mio codice è:
static void Skrci(string stavek)
{
string[] p;
p = stavek.Split(' '); // polje separatov
for (int i = 0; i < p.Length; i++)
{
if (p[i].Length > 0)
{
char zacetnica = Char.ToUpper(p[i][0]);
p[i] = p[i].Remove(0, 1);
p[i] = p[i].Insert(0, zacetnica.ToString());
}
}
stavek = string.Join(" ", p);
}
static void Main(string[] args)
{
string[] p = null;
Console.Write("Vpiši nek stavek: ");
string stavek = Console.ReadLine();
Skrci(stavek);
Console.WriteLine(stavek);
Console.ReadKey(true);
}
Ho provato ad entrare per vedere se riesco a vedere cosa c'è che non va ma non lo so.
Soluzione
Dovresti passare la stringa in modo che funzioni come riferimento, non come valore.Usa la parola chiave ref
per questo.
Esempio:
static void Skrci(ref string stavek)
{
string[] p;
p = stavek.Split(' '); // polje separatov
for (int i = 0; i < p.Length; i++)
{
if (p[i].Length > 0)
{
char zacetnica = Char.ToUpper(p[i][0]);
p[i] = p[i].Remove(0, 1);
p[i] = p[i].Insert(0, zacetnica.ToString());
}
}
stavek = string.Join(" ", p);
}
static void Main(string[] args)
{
string[] p = null;
Console.Write("Vpiši nek stavek: ");
string stavek = Console.ReadLine();
Skrci(ref stavek);
Console.WriteLine(stavek);
Console.ReadKey(true);
}
Altri suggerimenti
Il tuo problema è che la tua funzione Skrci
non restituisce un valore (o aggiorna il suo parametro (per riferimento))
Ecco una soluzione rapida
static string Skrci(string stavek)
{
string[] p;
p = stavek.Split(' '); // polje separatov
for (int i = 0; i < p.Length; i++)
{
if (p[i].Length > 0)
{
char zacetnica = Char.ToUpper(p[i][0]);
p[i] = p[i].Remove(0, 1);
p[i] = p[i].Insert(0, zacetnica.ToString());
}
}
return string.Join(" ", p);
}
static void Main(string[] args)
{
string[] p = null;
Console.Write("Vpiši nek stavek: ");
string stavek = Console.ReadLine();
stavek = Skrci(stavek);
Console.WriteLine(stavek);
Console.ReadKey(true);
}
Un modo semplice per convertire la tua stringa in Camel Case, è creare tu stesso il seguente metodo di estensione:
public static String ToCamelCase(this String source)
{
return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(source.ToLower());
}
(credito a https://stackoverflow.com/a/1168346/310001 )
Puoi quindi fare semplicemente così:
string stavek = Console.ReadLine().ToCamelCase();
Modifica:
E se vuoi rimuovere gli spazi tra le parole, puoi ovviamente aggiungere semplicemente .Replace(" ", "")
alla fine.
Se ti capisco bene, questo è quello che stai cercando di fare:
static string Skrci(string stavek)
{
string[] p;
p = stavek.Split(' '); // polje separatov
for (int i = 0; i < p.Length; i++)
{
if (p[i].Length > 0)
{
char zacetnica = Char.ToUpper(p[i][0]);
p[i] = p[i].Remove(0, 1);
p[i] = p[i].Insert(0, zacetnica.ToString());
}
}
stavek = string.Join(String.Empty, p);
return stavek;
}
static void Main(string[] args)
{
string[] p = null;
Console.Write("Vpiši nek stavek: ");
string stavek = Console.ReadLine();
stavek = Skrci(stavek);
Console.WriteLine(stavek);
Console.ReadKey(true);
}
Se vuoi concatenare le stringhe senza lo spazio bianco, non usare la stringa. Unisciti con "" come separatore.Inoltre, non stai stampando il risultato del metodo, ma solo la tua stringa di input.
static string Skrci(string stavek)
{
string[] p;
p = stavek.Split(' '); // polje separatov
for (int i = 0; i < p.Length; i++)
{
if (p[i].Length > 0)
{
char zacetnica = Char.ToUpper(p[i][0]);
p[i] = p[i].Remove(0, 1);
p[i] = p[i].Insert(0, zacetnica.ToString());
}
}
stavek = string.Join("", p);
return stavek;
}
static void Main(string[] args)
{
string[] p = null;
Console.Write("Vpiši nek stavek: ");
string stavek = Console.ReadLine();
stavek = Skrci(stavek);
Console.WriteLine(stavek);
Console.ReadKey(true);
}