El siguiente es mi código para convertir todas las palabras de la oración en PigLatin, es decir, "Le robaron la comida" a "ERHAY OODFAY ISAY OLENSTAY", pero el resultado que obtengo es ERHAY. Cualquier corrección sería apreciada. Gracias.
public class piglatin { public void main(String s) { s=s.toUpperCase(); s=s+" "; int l=s.length(); String word=""; int n=0; int w=0;//no of words in s(loop1) int wor=0;//no of words loop2 for(int i=0;i<l;i++) {char c=s.charAt(i); if(c==' ') w++; } for(int i=0;i<l;i++) { char c=s.charAt(i); int m=s.indexOf(' '); //length of first word if(i==0) { for(int j=0;j<m;j++) {char c1=s.charAt(j); if(c1=='A'||c1=='E'||c1=='I'||c1=='O'||c1=='U') {n=j;//index of first vowel j=m;} } word=s.substring(n,m)+s.substring(0,n); System.out.print(word+"AY"+" "); } if(c==' '&&wor!=w-1) { s=s.substring(m+1,l); l=s.length(); i=0; wor++; } if(wor==w-1) i=l+1; } } }Puede simplificarlo enormemente dividiendo la oración en espacios en blanco y procesando cada palabra de la matriz resultante.
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter a sentence: "); String s = scanner.nextLine(); s = s.toUpperCase(); String[] words = s.split("\\s+");// Split s on whitespace // Process each word from words[] for (String word : words) { int m = word.length(), j; for (j = 0; j < word.length(); j++) { char c1 = word.charAt(j); if (c1 == 'A' || c1 == 'E' || c1 == 'I' || c1 == 'O' || c1 == 'U') { break; } } String translated = word.substring(j, m) + word.substring(0, j); System.out.print(translated + "AY" + " "); } } }Una ejecución de muestra:
Enter a sentence: Her food is stolen ERHAY OODFAY ISAY OLENSTAY Alternativamente , además de usar String#indexOf(int ch) , puede usar String#indexOf(String str, int fromIndex) para obtener todas las palabras de la oración.
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter a sentence: "); String s = scanner.nextLine(); s = s.toUpperCase(); // Start from index, 0 int fromIndex = 0, lastPositionOfWhitespace = -1; for (int i = 0; i < s.length(); i++) { int indexOfWhitespace = s.indexOf(' ', fromIndex); String word = ""; if (indexOfWhitespace != -1) { lastPositionOfWhitespace = indexOfWhitespace; word = s.substring(fromIndex, indexOfWhitespace); fromIndex = indexOfWhitespace + 1; } else { word = s.substring(lastPositionOfWhitespace + 1);// Last word of the sentence i = s.length();// To stop further processing of the loop with counter, i } int m = word.length(), j; for (j = 0; j < word.length(); j++) { char c1 = word.charAt(j); if (c1 == 'A' || c1 == 'E' || c1 == 'I' || c1 == 'O' || c1 == 'U') { break; } } String translated = word.substring(j, m) + word.substring(0, j); System.out.print(translated + "AY" + " "); } } }Una ejecución de muestra:
Enter a sentence: Her food is stolen ERHAY OODFAY ISAY OLENSTAY