¿Cómo modifico una cadena como 'santa maria' en "Santa Maria"?

Mi programa funciona pero no de la manera que quiero. Esta es la salida que quiero:

C:\Documents and Settings\Joe King\My Documents\418.85A Java\Projects\Day 6>java Project3 nina pinta "santa maria"



The Nina is decreasing throttle!

    The Nina is ready to launch...

            but the throttle is down, increase throttle!


The Pinta is lowering the main!

    The Pinta is ready to launch...

            but the sail is down, hoist the main!


The Santa Maria is hoisting the main!

    The Santa Maria is ready to launch...

            the sail is up, ahead full!



(press ENTER to exit)

Como puede ver, Santa María ha sido capitalizada. Aquí está la salida que obtengo:

C:\Documents and Settings\Joe King\My Documents\418.85A Java\Projects\Day 6>java Project3 nina pinta "santa maria"



The Nina is decreasing throttle!

    The Nina is ready to launch...

            but the throttle is down, increase throttle!


The Pinta is lowering the main!

    The Pinta is ready to launch...

            but the sail is down, hoist the main!


The santa maria is hoisting the main!

    The santa maria is ready to launch...

            the sail is up, ahead full!



(press ENTER to exit)

Mi código no puede capitalizar cadenas de nombres como Santa Maria. Aquí está mi código:

class Project3{

public static void main(String[] args){

    Boat[] boatArray;
    String result = " "; 
    char firstChar;
    char firstLetter;
    char secondLetter;
    int i;

    boatArray = new Boat[args.length];

    if(args.length > 0){

        for(i = 0 ; i < args.length ; i++){

            String delimiters = "[ ]";
            int limit = -1;

            String[]tokens = args[i].split(delimiters, limit);

            for( int k = 0 ; k < tokens.length ; ++k ){

                if( tokens[k].length() > 1 ){

                    tokens[k] = tokens[k].trim();

                }else{

                    tokens[k] = " ";

                }

                firstChar = tokens[k].charAt(0);

                if(firstChar == ' '){

                    break;

                }else{

                    if(Character.isUpperCase(firstChar)){

                        break;

                    }else{

                        firstChar = Character.toUpperCase(firstChar);
                        char[] tokenArray = tokens[k].toCharArray();                            
                        String text = new String(tokenArray, 1, (tokenArray.length - 1) );                          
                        tokens[k] = firstChar + text;

                    }

                    result = result + tokens[k];

                    if( k != tokens.length - 1 ){

                        break;

                    }else{

                        result = result.trim();
                        args[i] = result;
                        result = " ";

                    }
                }
            }       

            firstLetter = args[i].charAt(0);

            if((firstLetter == 'B') || (firstLetter == 'C') || (firstLetter == 'N')){

                boatArray[i] = new RaceBoat();
                boatArray[i].christenBoat(args[i]);

            }else{

                boatArray[i] = new SailBoat();
                boatArray[i].christenBoat(args[i]);

            }


        }

        System.out.println("\n");

        for(i = 0 ; i < args.length ; i++){         

            secondLetter = Character.toUpperCase(args[i].charAt(1));

            if((secondLetter == 'A') || (secondLetter == 'E')){

                boatArray[i].increaseSpeed();
                boatArray[i].goFast();

            }else{

                boatArray[i].decreaseSpeed();
                boatArray[i].goSlow();

            }           

            boatArray[i].launchBoat();
            boatArray[i].whatIsBoatState();

        }

    }else{

        System.out.println("\n\nArgh!... you forgot to enter ship names scalawag!" +
            "\n\n\n\tPlease try again!");

    }

    System.out.println("\n\n(press ENTER to exit)\n\n");

    try{

        System.in.read();

    } catch(IOException e){

        return;
    }
}

}

El pensamiento del problema puede ser que el análisis de santa maría causó lo siguiente:

' santa '

' '

' maria '

Pensé que este código lo recortaría:

if( tokens[k].length() > 1 ){

                    tokens[k] = tokens[k].trim();

                }else{

                    tokens[k] = " ";

                }

pero aparentemente no lo hace. ¿Cómo logro esto?

Respuesta 1

Echa un vistazo a la función Commons-Lang StringUtils.capitalize.

Capizalizar

Tienes disponible el código fuente que puede ser útil si quieres aprender cómo lo hacen los profesionales :)

Y esto puede capitalizar su palabra.

StringBuilder b = new StringBuilder();
String[] parts = originalWord.split(" ");
for(String part : parts) {
    String capitalized = part.substring(0, 1).toUppercase() + part.substring(1);
    b.append(capitalized).append(" ");
}
//and then you can remove the last space if it is your taste.
return b.toString();

Carece de controles básicos pero lo haría :).

¡Buena suerte!

Respuesta: 2

Pensé que este código lo recortaría ...

En realidad, ese código también reemplazará cualquier palabra de una letra con un espacio.

Otro problema es con la expresión regular que está utilizando. Desea tratar uno o MÁS espacios como un SOLO delimitador. Consulte los javadocs y / o su libro de texto y notas de conferencias sobre cómo escribir una expresión regular para hacerlo. (Nota: si lo hace bien, no será necesario recortar espacios en blanco. Split lo hará por usted).

Sugerencias suficientes :-)


También pensé en eso, pero la mayoría de los nombres de barcos no tienen letras en inglés.

No debe conectar suposiciones así en su código. Especialmente cuando no lo NECESITAS. Las suposiciones cableadas conducen a un código frágil; es decir, código que se rompe cuando sus suposiciones resultan incorrectas a veces .

Respuesta: 3

Tengo 2 servidores, uno con una aplicación Java que usa Spring para el manejo de la conexión DB, y el otro con MySQL. El retraso de ping entre ambos servidores es de aproximadamente 100 ms. El servidor Java está utilizando inserciones masivas para DB, ...

Estoy intentando mostrar un .tif en Java usando un número mínimo de bibliotecas adicionales: import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing ....

Estoy tratando de enviar un correo electrónico utilizando la API de correo Java. Pero mi texto de correo electrónico es demasiado grande para ser almacenado en una Cadena. ¿Hay alguna forma de enviar un correo electrónico con algo así como una matriz de cadenas o cualquier colección?

Estoy trabajando en un proyecto en el trabajo, y me encargaron implementar una biblioteca Java Swing personalizada que registre un evento en un archivo cada vez que un usuario interactúe con un componente Swing. En otra ...