cómo encontrar i de un token en una matriz [i]

Entonces, he encontrado una palabra en un documento e imprimo la línea en la que la palabra está presente así:

dicho archivo de ejemplo contiene: "El rápido zorro marrón salta sobre el perro perezoso. A Jackdaws le encanta mi gran esfinge de cuarzo".

 FileInputStream fstream = new FileInputStream(file);
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
        String strLine;        
        //Read File Line By Line
        while((strLine = br.readLine()) != null){                
            //check to see whether testWord occurs at least once in the line of text
            check = strLine.toLowerCase().contains(testWord.toLowerCase());

            if(check){                    
                //get the line, and parse its words into a String array
                String[] lineWords = strLine.split("\\s+"); 

                for(int i=0;i<lineWords.length;i++){
                    System.out.print(lineWords[i]+ ' ');

                }

Y si busco 'zorro', entonces las palabras de línea [] contendrán tokens de la primera oración. y palabras de línea [3] = zorro. Para imprimir el color del zorro, necesito palabras de línea [2]. Me preguntaba cómo podemos obtener la 'i' de un token en esas palabras de línea [i], porque quiero que la salida sea palabras de línea [i-1]

Respuesta 1

Eso se puede hacer atravesando la matriz y cuando reciba su palabra, imprima la que está antes. Así es como:

if(lineWords[0].equals(testWord)
return;//no preceding word

   for(int i=1;i<lineWords.length;i++){
    if(lineWords[i].equals(testWord){
    System.out.println(lineWords[i-1]);
    break;
    }
   }
Respuesta: 2

Puede usar un hashMapque almacena la palabra y una lista con los índices.

HashMap<String, List<Integer>> indices = new HashMap<>();

Entonces, en el forbucle, llena el HashMap:

  for(int i=0;i<lineWords.length;i++){
       String word = lineWords[i];
       if (!indices.contains(word)) {
          indices.put(word, new ArrayList<>();
       } 
       indices.get(word).add(i);
  }

Para obtener todos los índices de una palabra específica llame:

  List<Integer> indicesForWord = indices.get("fox");

Y para obtener la i - 1palabra llame:

  for (int i = 0; i < indicesForWord.size(); i++) {
      int index = indicesForWord[i] - 1;
      if (index >= 0 || index >= lineWords.length) {
          System.out.println(lineWords[index]);
      }
  }
Respuesta: 3

¿Cómo puedo crear un ViewPager personalizado? Para crear una instancia de una página en ViewPager es algo como esto: public Object instantiateItem (Ver colección, posición int) {...

Estoy tratando de implementar VOSAO CMS web en el motor de aplicaciones de Google para la aplicación Java, pero cuando voy a implementar esto, está mostrando una excepción que es: C: \ appengine \ bin> appcfg.cmd update c: \ vosaocms \ ...

Usando IntelliJ 14.0.3, mi proyecto de Android funcionaba hasta que construí el proyecto varias veces uno después del otro y BANG, ya no aparece y arroja una excepción de tiempo de ejecución: java.lang ...

Estoy intentando un escenario negativo para el nombre de suscripción (cadena) para diferentes tipos de datos que es booleano. Ejemplos: | Nombre de suscripción | Id. De extensión | Nombre del propietario | Apellido del propietario | | verdadero | "423" | "...