studio que programacion móviles libro descargar desarrollo curso aplicaciones 3cx java file map hashmap

java - que - manual de programacion android pdf



Reemplazar el símbolo con un número (1)

Quiero leer un archivo y detectar si el personaje después del símbolo es un número o una palabra. Si es un número, quiero eliminar el símbolo que está delante de él, convertir el número en binario y reemplazarlo en el archivo. Si es una palabra, quiero establecer los caracteres al número 16 al principio, pero luego, si se usa otra palabra, quiero agregar el 1 al número original. Esto es lo que quiero:

Si el nombre del archivo es leído (... representa una cadena que no necesita traducción):

%10 ... %firststring ... %secondstring ... %firststring ... %11 ... and so on...

Quiero que se vea así:

0000000000001010 (10 in binary) ... 0000000000010000 (16 in binary) ... 0000000000010001 (another word was used, so 16+1 = 17 in binary) ... 0000000000010000 (16 in binary) ... 0000000000001011 (11 in binary)

Y esto es lo que probé: anyLines es solo una matriz de cadenas que tiene el contenido del archivo (si tuviera que decir System.out.println (anyLines [i]), imprimiría el contenido del archivo).

¡ACTUALIZADO!

try { ReadFile files = new ReadFile(file.getPath()); String[] anyLines = files.OpenFile(); int i; int wordValue = 16; // to keep track words that are already used Map<String, Integer> wordValueMap = new HashMap<String, Integer>(); for (String line : anyLines) { // if line doesn''t begin with &, then ignore it if (!line.startsWith("@")) { continue; } // remove line = line.substring(1); Integer binaryValue = null; if (line.matches("//d+")) { binaryValue = Integer.parseInt(line); } else if (line.matches("//w+")) { binaryValue = wordValueMap.get(line); // if the map doesn''t contain the word value, then assign and store it if (binaryValue == null) { binaryValue = wordValue; wordValueMap.put(line, binaryValue); ++wordValue; } } // I''m using Commons Lang''s StringUtils.leftPad(..) to create the zero padded string System.out.println(Integer.toBinaryString(binaryValue)); }

Ahora, solo tengo que reemplazar los símbolos (% 10,% firststring, etc.) con el valor binario.

Después de ejecutar este código, lo que obtengo como salida es:

1010 10000 10001 10000 1011 %10 ... %firststring ... %secondstring ... %firststring ... %11 ...

Ahora solo necesito reemplazar el% 10 con 1010, el% firststring con 10000 y así sucesivamente, para que el archivo se lea así:

0000000000001010 (10 in binary) ... 0000000000010000 (16 in binary) ... 0000000000010001 (another word was used, so 16+1 = 17 in binary) ... 0000000000010000 (16 in binary) ... 0000000000001011 (11 in binary)

¿Tiene alguna sugerencia sobre cómo hacer que esto funcione?


Esto puede no estar haciendo lo que crees que está haciendo:

int binaryValue = wordValue++;

Como está utilizando el operador de incremento posterior, al valor binario se le asigna el valor de worldValue anterior y luego se incrementa worldValue. Haría esto en dos líneas separadas con el incremento hecho primero:

wordValue++; int binaryValue = wordValue; // binaryValue now gets the new value for wordValue

EDIT 1
De acuerdo, si aún necesita nuestra ayuda, le sugiero que haga lo siguiente:

  • Muéstrenos una muestra del archivo de datos para que podamos ver cómo se ve realmente.
  • Explique la diferencia entre la matriz anyLines y la matriz de líneas y cómo se relacionan con el archivo de datos. Ambos tienen Strings, y las líneas obviamente son el resultado de dividir anyLines con "/ n" pero lo que nuevamente es anyLines. Usted declara que el archivo es un archivo de texto, pero ¿cómo obtiene la matriz inicial de cadenas de este archivo de texto? ¿Hay otro delimitador que use para obtener esta matriz? ¿Ha intentado depurar el código imprimiendo el contenido de cualquier línea y línea?
  • Si necesita que WordValue persista con cada iteración de un bucle a través de cualquier línea (de nuevo, saber qué es lo que podría ayudar), tendrá que declararlo e inicializarlo antes del bucle.
  • Si no puede crear y publicar un SSCCE, al menos haga que el formato del código sea coherente y legible, algo así como el siguiente código.
  • Eche un vistazo al enlace sobre cómo hacer preguntas inteligentes para obtener más consejos sobre la información que podría proporcionarnos y que podrían ayudarnos a ayudarlo.

Formato de código de muestra:

try { ReadFile files = new ReadFile(file.getPath()); String[] anyLines = files.OpenFile(); String[] anyLines = {}; int i; // test if the program actually read the file for (i = 0; i < anyLines.length; i++) { String[] lines = anyLines[i].split("/n"); int wordValue = 76; Map<String, Integer> wordValueMap = new HashMap<String, Integer>(); for (String currentLine : lines) { if (!currentLine.startsWith("%")) { continue; } currentLine = currentLine.substring(1); Integer value; if (currentLine.matches("//d+")) { value = Integer.parseInt(currentLine); } else if (currentLine.matches("//w+")) { value = wordValueMap.get(currentLine); if (value == null) { int binaryValue = wordValue++; wordValueMap.put(currentLine, binaryValue); // TODO: fix below // !! currentLine.replace(currentLine, binaryValue); value = binaryValue; } } else { System.out.println("Invalid input"); break; } System.out.println(Integer.toBinaryString(value)); } } } finally { // Do we need a catch block? If so, catch what? // What''s supposed to go in here? }

¡Suerte!