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();
}
}
}
@ 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.