Como dividir um arquivo de texto com nenhum padrão

pwhockey61:

Eu sou dado um conjunto confuso de dados e tem que dividir os dados em categorias. A primeira linha é a taxa de imposto, a seguinte linha é suposto ser "itens", "Número de itens", e preço (colunas). Eu só preciso de ajuda dividindo os dados em conformidade. Qualquer ajuda seria apreciada.

0.05  5
Colored Pencils 3 0.59
Notebook 5 0.99
AAA Battery  5 0.99
Java Book 5 59.95
iPhone X 2 999.99
iPhone 8 3 899.99.
import java.io.*;
import java.util.Scanner;

public class ShoppingBagClient {

    public static void main(String[] args) {
        File file = new File("data.txt");
        shoppingBag(file);
    }

    public static void shoppingBag (File file) {
        Scanner scan;
        String itemName=" ";
        int quantity = 0;
        float price = 0;
        int count = 0;
        float taxRate;

        ShoppingBag shoppingBag = new ShoppingBag(6, .5f);
        try {
            scan = new Scanner(new BufferedReader(new FileReader(file)));
            String dilimeter;
            while(count < 1) {
                String line = scan.nextLine();
                String[] arr = line.split(" ");
                taxRate = Float.parseFloat(arr[0]);


            }

            while(scan.hasNextLine() && count > 0){
                String line = scan.nextLine();
                String delimeter;
                String arr[] = line.split();
                itemName = arr[0];
                quantity = Integer.parseInt(arr[1]);
                price = Float.parseFloat(arr[2]);
                Item item =``` new Item(itemName, quantity, price);
                shoppingBag.push(item);
                System.out.println(itemName);

            }

        }
        catch(IOException e) {
            e.printStackTrace();
        }

    }

}
James Birch:

@ O comentário de Henry dá uma boa abordagem. Se você conhece a estrutura de cada linha e que é delimitada de forma consistente (por exemplo, um único espaço), então você pode combinar lastIndexOf e substring para fazer o trabalho.

String delimiter = " ";

String line = scan.nextLine();              // "Colored pencils 3 0.59"

int last = line.lastIndexOf(delimiter);     // "Colored pencils 3_0.59"

String price = line.substring(last + 1);    // "0.59"

line = line.substring(0, last);             // "Colored pencils 3"

last = line.lastIndexOf(delimiter);         // "Colored pencils_3"

String quantity = line.substring(last + 1); // "3"

line = line.substring(0, last);             // "Colored pencils"

String product = line;

Isso pode ser reformulado para ser mais arrumado, mas ilustra o ponto. Esteja consciente de que se lastIndexOf devolve o carácter final na linha, então substring(last + 1)irá lançar um StringIndexOutOfBoundsException. A verificação também devem ser tomados para se lastIndexOf não encontrar uma correspondência, caso em que ele irá retornar -1.

Edit: O preço ea quantidade pode então ser convertido para um int ou flutuador conforme necessário.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=225584&siteId=1
Recomendado
Clasificación