Entonces, en mi archivo tengo dos listas, una para las palabras únicas que se usarán para formar la oración completa y la otra es la oración comprimida que se comprimió en las posiciones de las palabras en la lista de palabras únicas. El archivo se ve así:
Is, this, a, simple, sentence, 1, 2, 3, 4, 5, 3, 4, 5, 4,Quiero que mi programa use las palabras únicas y vuelva a crear la oración original que era: ¿Es esta una oración simple? Una oración simple es simple. Sin embargo, mi código no funciona de la manera que quiero que funcione, por lo que no descomprime la oración. Aquí está mi código:
public static void main(String[] args) { String compressed = ""; String compressed1 = ""; int Index1; String orig = ""; int num1=0; int num2=0; BufferedReader br; try{ br = new BufferedReader (new FileReader("CompletedWork.txt")); try { String Uni = br.readLine(); System.out.println(Uni); //outputs the content of the first line in the file String Uni1 = Uni.replaceAll(",", ""); //gets rid of the commas in the unique words String Uni2 = Uni1.toLowerCase(); //changes the case to lowercase String[] ArrUni = Uni2.split(" "); //turns the string into a string array System.out.println(ArrUni[0]); // checks that the array splits into words compressed = br.readLine(); //read next line System.out.println(compressed); //outputs the compressed compressed1 = compressed.replaceAll(",", ""); //removes the punctuation from the compressed sentence. System.out.println(compressed1); String[] ArrComp = compressed1.split(" "); System.out.println(ArrComp[2]); for(num1=0; num1 < ArrComp.length; num1++) { //starts the loop for(num2=0; num2 < ArrComp.length; num2++) { if (ArrComp[num1].equals(num2)) { orig = orig.concat(ArrUni[num2]); }else{ } }} } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { System.out.println(e); //outputs an error message if the file is not present e.printStackTrace(); } System.out.println(orig); }}
Tengo todas las importaciones solo para aclarar. La cadena Orig debe generarse pero no es así y debe contener la oración original. Aquí está la salida a la consola:
run: Is, this, a, simple, sentence, is 1, 2, 3, 4, 5, 3, 4, 5, 4, 1 2 3 4 5 3 4 5 4 3 BUILD SUCCESSFUL (total time: 0 seconds)Como puede ver, hay un espacio después del 3 que es donde se emite Orig pero no se emite nada. Espero que alguien pueda ayudarme a resolver esto. Si necesita más información para resolver, solo pregunte. FYI soy bastante nuevo en Java.
El problema es su declaración if. Está comparando una cadena (ArrComp[num1]) con un número (num2) que siempre devolverá falso.
Debería ser:
if (Integer.parseInt(ArrComp[num1]) == num2) { orig = orig.concat(ArrUni[num2 - 1] + " "); }También tenga en cuenta el - 1 al obtener la palabra para evitar una ArrayIndexOutOfBoundsException y el espacio entre las palabras.
Y si tu quieres:
Is this a simple sentence a simple sentence is simpleEntonces tu oración comprimida tiene que ser:
1, 2, 3, 4, 5, 3, 4, 5, 1, 4,También puede hacer que su otro código sea eficiente o al menos más fácil de leer usando una expresión regular para dividir las cadenas en una coma y deshacerse del espacio extra en una línea, así:
yourString.split("\\s*,\\s*");