Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: TrashAmbishion en 11 Abril 2021, 23:43 pm



Título: Me explican que esta sucediendo aquí!!
Publicado por: TrashAmbishion en 11 Abril 2021, 23:43 pm
Hola,

frase[0] = "eyes";

frase[0].Replace(frase[0].Substring(0, 1), frase[0].Substring(0, 1).ToUpper());

Lo que pretendo es poner la primera letra en mayúsculas pero en cambio me saca EyEs...

Me explican porque.

Saludos


Título: Re: Me explican que esta sucediendo aquí!!
Publicado por: Serapis en 12 Abril 2021, 00:36 am
Claro...

Observa, desgranando los parámetros
Código:
quien es reamplazado = frase[0].Substring(0, 1)
quien le sustituye = frase[0].Substring(0, 1).ToUpper()

frase[0].Replace(quien es remplazado, quien le sustituye)
Como quiera que el carácter a remplazar (0,1) es la 'e', y que se remplaza todas sus apariciones por 'E'... pués el resultado obtenido es correcto, pero no el deseado...

Prueba con:
Código:
frase[0] = "elefante valiente"
Verás que todas las 'e' acaban siendo mayúsculas. Con solo 2 'e' en una palabra tan corta, es posible que te cueste más verlo claro...

Si lo que buscas es poner (solo) la primera letra en mayúsculas, hay varios modos, he aquí uno de ellos:
Código:
string s = frase[0].substring(0,1).toUpper   // toma el primer caracter y lo comvierte a mayúsculas
frase[0] = s + frase[0].substring(1,frase[0].length-1)  // concatena detrás el resto de la cadena.
.



Título: Re: Me explican que esta sucediendo aquí!!
Publicado por: TrashAmbishion en 12 Abril 2021, 00:50 am
Hola,

Gracias por la pronta respuesta.

Pero en teoría estoy especificando que lo que deseo modificar sera el primer carácter o no?

O substring hace una búsqueda de ese carácter en toda la cadena?

Saludos


Título: Re: Me explican que esta sucediendo aquí!!
Publicado por: Serapis en 12 Abril 2021, 01:03 am
No.

Tu estás haciendo un Replace.
Tus 'substring' solo señalan que se será remplazado y por quien será remplazado...
Esto es, tus substrings, son los parámetros de la orden Remplazar.

Tu estás haciendo esto:

Código:
frase[0] = "eyes";

frase[0].Replace("e", "E");


Título: Re: Me explican que esta sucediendo aquí!!
Publicado por: TrashAmbishion en 12 Abril 2021, 01:12 am
Ah el replace es el de la cuestión...

Es que asumí otra cosa con el, me hice la idea que se remplazaba ese carácter nada mas..

replace("a","d")

No asumí que buscaba todas las "a" en la cadena

Vale, muchas gracias, todo bien


Título: Re: Me explican que esta sucediendo aquí!!
Publicado por: Danielㅤ en 12 Abril 2021, 02:56 am
Hola, pues si, el método Replace() reemplaza todas las coincidencias encontradas con el patrón dado.


Saludos


Título: Re: Me explican que esta sucediendo aquí!!
Publicado por: **Aincrad** en 12 Abril 2021, 22:54 pm
Yo lo haría así :

Código
  1. Dim Frase As String = "eyes"
  2.        Frase = Frase.Substring(0, 1).ToUpper + Frase.Remove(0, 1)
  3.  

en C#:

Código
  1. string Frase = "eyes";
  2.    Frase = Frase.Substring(0, 1).ToUpper() + Frase.Remove(0, 1);

y la salida es : "Eyes"


Título: Re: Me explican que esta sucediendo aquí!!
Publicado por: LastChance en 15 Mayo 2021, 20:26 pm
Suponiendo que solo tengas una palabra y quieras volver mayúscula la primera letra de esa palabra, es decir, lo que haces en el ejemplo que mostraste, entonces puedes simplificar el código haciendo uso de la función: CultureInfo.InvariantCulture.TextInfo.ToTitleCase()

Código
  1. string str = "eyes";
  2. str = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(str);

Si por lo contrario lo que pretendes es volver mayúscula la primera letra de la primera palabra en conjunto de palabras o frase, pues ya te han dado soluciones. Aunque yo lo haría de la siguiente manera:

Código
  1. string str = "eyes";
  2. str = $"{char.ToUpper(str.First())}{str.Remove(0, 1)}";

O de esta otra forma si además necesitas volver minúscula los demás caracteres de la palabra:

Código
  1. string str = "eyes";
  2. str = $"{char.ToUpper(str.First())}{str.Remove(0, 1).ToLower()}";

Saludos.