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

2 respostas
L

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);

}

}

2 Respostas

wldomiciano

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.

<small>Linha 173</small>

<aside class="onebox githubblob">
  <header class="source">
      <a href="https://github.com/apache/commons-text/blob/master/src/main/java/org/apache/commons/text/WordUtils.java#L173" target="_blank">github.com</a>
  </header>
  <article class="onebox-body">
    <h4><a href="https://github.com/apache/commons-text/blob/master/src/main/java/org/apache/commons/text/WordUtils.java#L173" target="_blank">apache/commons-text/blob/master/src/main/java/org/apache/commons/text/WordUtils.java#L173</a></h4>
<pre class="onebox"><code class="lang-java"><ol class="start lines" start="163" style="counter-reset: li-counter 162 ;">
<li> * WordUtils.capitalize("i aM.fine", {'.'}) = "I aM.Fine"</li>
<li> * WordUtils.capitalize("i am fine", new char[]{}) = "I am fine"</li>
<li> * </pre></li>
<li> *</li>
<li> * @param str  the String to capitalize, may be null</li>
<li> * @param delimiters  set of characters to determine capitalization, null means whitespace</li>
<li> * @return capitalized String, {@code null} if null String input</li>
<li> * @see #uncapitalize(String)</li>
<li> * @see #capitalizeFully(String)</li>
<li> */</li>
<li class="selected">public static String capitalize(final String str, final char... delimiters) {</li>
<li>    if (StringUtils.isEmpty(str)) {</li>
<li>        return str;</li>
<li>    }</li>
<li>    final Set<Integer> delimiterSet = generateDelimiterSet(delimiters);</li>
<li>    final int strLen = str.length();</li>
<li>    final int[] newCodePoints = new int[strLen];</li>
<li>    int outOffset = 0;</li>
<li>
</li>
<li>    boolean capitalizeNext = true;</li>
<li>    for (int index = 0; index < strLen;) {</li>
</ol>
<small>E linha 303</small>

<aside class="onebox githubblob">
  <header class="source">
      <a href="https://github.com/apache/commons-text/blob/3b1a0a5a47ee9fa2b36f99ca28e2e1d367a10a11/src/main/java/org/apache/commons/text/WordUtils.java#L303" target="_blank">github.com</a>
  </header>
  <article class="onebox-body">
    <h4><a href="https://github.com/apache/commons-text/blob/3b1a0a5a47ee9fa2b36f99ca28e2e1d367a10a11/src/main/java/org/apache/commons/text/WordUtils.java#L303" target="_blank">apache/commons-text/blob/3b1a0a5a47ee9fa2b36f99ca28e2e1d367a10a11/src/main/java/org/apache/commons/text/WordUtils.java#L303</a></h4>
<pre class="onebox"><code class="lang-java"><ol class="start lines" start="293" style="counter-reset: li-counter 292 ;">
<li>    return true;</li>
<li>}</li>
<li>
</li>
<li>/**</li>
<li> * Converts an array of delimiters to a hash set of code points. Code point of space(32) is added as the default</li>
<li> * value if delimiters is null. The generated hash set provides O(1) lookup time.</li>
<li> *</li>
<li> * @param delimiters set of characters to determine capitalization, null means whitespace</li>
<li> * @return Set<Integer></li>
<li> */</li>
<li class="selected">private static Set<Integer> generateDelimiterSet(final char[] delimiters) {</li>
<li>    final Set<Integer> delimiterHashSet = new HashSet<>();</li>
<li>    if (delimiters == null || delimiters.length == 0) {</li>
<li>        if (delimiters == null) {</li>
<li>            delimiterHashSet.add(Character.codePointAt(new char[] {' '}, 0));</li>
<li>        }</li>
<li>
</li>
<li>        return delimiterHashSet;</li>
<li>    }</li>
<li>
</li>
<li>    for (int index = 0; index < delimiters.length; index++) {</li>
</ol>
L

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

Criado 7 de setembro de 2021
Ultima resposta 7 de set. de 2021
Respostas 2
Participantes 2
Alura O que é Python? — um guia completo para iniciar nessa linguagem de programação Acesse agora o guia sobre Python e inicie sua jornada nessa linguagem de programação: o que é e para que serve, sua sintaxe e como iniciar nela!
Casa do Codigo Engenharia de Prompt para Devs: Um guia para aprender a... Por Ricardo Pupo Larguesa — Casa do Codigo