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>