Converter as primeiras letras de cada palavra na frase sem usar o split()

Ola

Sou iniciante em java e estou fazendo um programa que eu deixe as primeiras letras da frase em maiusculo mas nao posso utilizar o split().
Estou tentando fazer mas esta apresentando erros, alguem poderia me ajudar ?
Segue a interface, a classe que implementa e o main

public interface GMaiusculo {
String converteMaiusculo(String par);
}

public class LetraMaiuscula implements GMaiusculo {

@Override
public String converteMaiusculo(String par){

	public converte(String palavra) {

		palavra = palavra.substring(0,1).toUpperCase().concat(palavra.substring(1));

		return palavra;

	}

}

}

public class ConvertePalavra {

public static void main(String[] args) {

	GMaiusculo letra= new LetraMaiuscula();
	letra= letra.converteMaiusculo("teste,banana laranja");
	System.out.println(letra);

}

}

Seu programa t√° um pouco complicado porque tem v√°rios erros de sintaxe.

No trecho abaixo parece que vc tá declarando um constructor dentro de um método, o que não faz sentido de muitas formas.

public String converteMaiusculo(String par){
	public converte(String palavra) {
    // ...
	}
}

Já no trecho abaixo vc está atribuindo o retorno do método converteMaiusculo() à variável letra, só que letra é do tipo GMaiusculo e o retorno de converteMaiusculo() é do tipo String.

Seu programa corrigido de forma que compila e executa ficaria assim:

interface GMaiusculo {
  String converteMaiusculo(String par);
}

class LetraMaiuscula implements GMaiusculo {
  @Override
  public String converteMaiusculo(String palavra) {
    palavra = palavra.substring(0, 1).toUpperCase().concat(palavra.substring(1));
    return palavra;
  }
}

class ConvertePalavra {
  public static void main(String... args) {
    GMaiusculo letra = new LetraMaiuscula();
    String palavraConvertida = letra.converteMaiusculo("teste,banana laranja");
    System.out.println(palavraConvertida);
  }
}

S√≥ que ele s√≥ deixa mai√ļscula a primeira letra.

Se vc s√≥ vai lidar com caracteres simples como letras, n√ļmeros, pontua√ß√£o e alguns outros s√≠mbolos, n√£o vai precisar de muita coisa e acredito que o c√≥digo abaixo j√° seja o suficiente.

import java.util.Arrays;
import java.util.List;

class App {
  public static String capitalize(final String str) {
    final List<Character> delimiters = Arrays.asList(' ', ',', '.');

    if (str != null && str.trim().length() > 0) {
      final char[] characters = str.toCharArray();

      final int strLen = str.length();

      characters[0] = Character.toUpperCase(characters[0]);

      for (int i = 1; i < strLen; i++) {
        if (delimiters.contains(characters[i - 1])) {
          characters[i] = Character.toUpperCase(characters[i]);
        }
      }

      return String.valueOf(characters);
    }

    return str;
  }

  public static void main(String... args) {
    System.out.println(capitalize("teste,banana laranja"));
  }
}

Mas para uma solução mais completa, que consiga lidar bem com caracteres além do plano básico do Unicode, recomendo estudar o código da biblioteca Apache Commons, vou deixar os trechos abaixo.

Linha 173

E linha 303

Ola
Obrigado pela orientação, vou aplicar aqui nos meus estudos !

1 curtida