En primer lugar, gracias por todo lo que haces. Soy nuevo en Java y estoy creando un programa para pedirle al usuario el nombre, el tipo de ticket y la cantidad adecuada. Estoy tomando esa información y escribiéndola en un archivo de texto (project.txt). Estoy leyendo el contenido del archivo txt usando Scanner readArray y luego clasifico el contenido en una matriz 'lista'. He ordenado la lista alfabéticamente y ahora quiero buscar en la matriz una palabra clave ingresada por la entrada del usuario. La lista se almacena como "nombre, tipo de ticket, multa (ej .: mike, exceso de velocidad, 250.00". Cuando el usuario ingresa un nombre para buscar (ej: mike), no se me encuentra ... aunque mike, speed , 100.00 está en el proyecto.txt. Siento que tiene que ver con valores separados por comas, sin embargo, tengo que formatearlo de esta manera. )

import java.util.*;
import java.io.*;
import java.lang.reflect.Array;
import java.text.Collator;
public class Project {

    public static void main(String[] args) throws IOException {

    String name = "";
    String ticketType = "";
    double fine;
    char quit;
    boolean cont = true;

    while (cont){
    do {
        PrintStream out = new PrintStream(new FileOutputStream("Project.txt", true));
        Scanner input = new Scanner(System.in);

        System.out.println("Name:");
        name = input.nextLine();
        System.out.println("Ticket Type:");
        ticketType = input.nextLine();
        System.out.println("fine:");
        fine = input.nextDouble();
        System.out.println("press 'q' if you are done entering or 'c' to continue entering");
        quit = input.next().toLowerCase().charAt(0);
            out.print(name + ", ");
            out.print(ticketType + ", ");
            out.printf("%.2f",fine);
            out.println();
            out.close();
    }
    while (!(quit == 'q'));{
        System.out.println("done");
    }
    Scanner input = new Scanner(System.in);
    System.out.println("are you sure youre done");
    System.out.println("enter y to if your done, n to enter more");
    char Continue = input.next().toLowerCase().charAt(0);

    if (Continue == ('y')){
        cont = false;
        }
    //Done entering names to list
    //Now read in file to array and sort alphabetically

    }
    Scanner readArray = new Scanner(new File("Project.txt"));
    ArrayList<String> list = new ArrayList<String>();
    while (readArray.hasNext()){
        list.add(readArray.next().toLowerCase());

    }
    readArray.close();
    Collections.sort(list, Collator.getInstance()); //sort array alphabetically
    list.forEach(System.out::println); //print array as list ',' separated
    Scanner search = new Scanner(System.in);
    System.out.println("search keyword: ");
    String keyword = search.next().toLowerCase();
    System.out.println("searching for: " + keyword);
    if (list.contains(keyword)){
        System.out.println("found");
    }
    else {
        System.out.println(" not found");
    }
    }
}
1
MichaelL 23 mar. 2017 a las 22:18

2 respuestas

La mejor respuesta

Como Arkadiy mencionó correctamente, la lista no contiene "mike", sino "mike, speeding, 250.00".

Una posible implementación de búsqueda ingenua es:

  String keyword = search.next().toLowerCase();
  System.out.println("searching for: " + keyword);

  boolean found = false;
  for (String element : list) {
    if (element.contains(keyword)) {
      found = true;
    }
  }

  if (found) {
    System.out.println("found");
  }
  else {
    System.out.println(" not found");
  }
}
0
Ossin Java guy 23 mar. 2017 a las 20:38

Solo lee el siguiente token en el archivo, lee la línea completa de esta manera:

while (readArray.hasNext()){
    list.add(readArray.nextLine().toLowerCase());

}

Lo mismo podría decirse de:

String keyword = search.nextLine().toLowerCase();

Arkadly es correcto, entonces si solo busca un nombre:

while (readArray.hasNext()){
    String name = readArray.nextLine().toLowerCase().split(",")[0];

    list.add(name);

}

Por cierto, .contains para ArrayList funciona de manera diferente a .contains para una cadena. Busca el elemento específico en ArrayList: https://www.tutorialspoint.com/java/java_arraylist_class.htm

0
Chester Cobus 23 mar. 2017 a las 20:35