Duda String Java

Intencity

Hola, tengo que resolver el siguiente problema en Java. Se trata de recibir una cadena y convertirla al estilo UpperCamelCase.
Por ejemplo: "Imprimir portada" -> "ImprimirPortada" quitando el espacio intermedio.
El profesor nos sugirio hacer un barrido de cadena con un for, pero soy algo nuevo en esto y me encuentro perdido.
Lo he intentado de la siguiente manera pero no es el resultado esperado.

public static void main(String[] args){
        
String cadena = "Imprimir portada"; cadena = cadena.replaceAll("\s", ""); cadena = cadena.replace("p", "P"); System.out.println(cadena); } }

Busque en StackOverFlow y en algunos otros foros pero no he encontrado la solucion especifica de este ejercicio. Cualquier ayuda me vendria muy bien, gracias.

Soulscx

y que cadena te sale por pantalla ?

1 respuesta
Intencity

#2

ImPrimirPortada

El inconveniente es que me tendria que convertir cualquier cadena que reciba de entrada a UpperCamelCase.

mortadelegle

A ver, si quieres que sea para cualquier entrada no puedes hardcodear ese levantamiento de p ahi, el truco esta en poner en mayuscula la primera letra de cada palabra iterando con el for o (un while) como te han dicho, pones a mayusculas un caracter, avanzas mientras no encuentres un espacio, el siguiente lo pones en mayuscula, y asi hasta que la recorras entera (Creo que hay una funcion toUpper pero no estoy seguro) y despues cargate los espacios, no antes, porque entonces ya no sabrias que palabra es cada una.

B

En mi opinion y sin importar el número de palabras, yo lo que haría sería un split de todas las palabras que contenga el string y las metería en un array. El separador debe ser el espacio.

Luego con cada palabra, coges la primera letra con un split, le haces uppercase y ya solo te queda ir añadiendo cadenas.

No se me ocurre otra manera más rápida ahora :D

1
Lecherito

#1

for: all chars in string {
  is space? upperNext
  else? do nothing
}

String#toUpperCase te convierte un char en upper
String#charAt(int) te da el char N de una cadena.

1 respuesta
Soulscx

La de #6 es buena solucion, solo que al final le quitas los espacios y yap.

Soumynon

#1 Haciendo uso de la clase Scanner puedes analizar cualquier cadena.

public static void main(String[] args) {
	String cadena = "Imprimir portada ahora veamos si funciona marty";
	String resultado = "";
	Scanner scanner = new Scanner(cadena);
	while (scanner.hasNext()) {
		String nextWord = scanner.next();
		//Se transforma la primera letra a mayúscula y se le añade el resto de la cadena.
		nextWord = nextWord.toUpperCase().charAt(0) + nextWord.substring(1);
		resultado += nextWord;
	}
	System.out.println(resultado);
	scanner.close();
}
ImprimirPortadaAhoraVeamosSiFuncionaMarty
2 1 respuesta
Intencity

#8 Funciona! Muchas gracias.

Lecherito

No me gusta darle el código directamente a la gente

9
Intencity

Les comparto el codigo que propuso el maestro para la resolución de este problema por si a alguno le es útil.

public class uppercamel2 {
    
public static void main(String[] args){ Scanner entrada = new Scanner(System.in); System.out.println("Teclea la cadena que convertiremos a UpperCamelCase"); String cadena = entrada.nextLine(); String resultado = ""; String mayuscula = ""; resultado = ""+cadena.charAt(0); resultado = resultado.toUpperCase(); for (int i = 1; i < cadena.length(); i++) { if(cadena.charAt(i)!= ' '){ resultado+=cadena.charAt(i); } else{ i++; mayuscula=""+cadena.charAt(i); resultado+=mayuscula.toUpperCase(); } } System.out.println(resultado); } }
1 1 respuesta
balmunG_

#11 si la cadena introducida termina con espacio peta al intentar acceder a una posición fuera de rango.

2
willy_chaos

Y no seria mas facil hacer un

String[] palabras = cadena.trim().split(' ');

String out = "";
int size = palabras.length;
for ( int i = 0; i<size;i++) {
	out+= cadena[i].substring(0, 1).toUpperCase() + cadena[i].substring(1);
}
1

Usuarios habituales