I have CSV file with sample data in this form :
220 30 255 0 0 Javascript
200 20 0 255 128 Thinking in java
, where the first column is height, second thickness, next three are rgb values for color and last one is title. All need to be treated as separate variables. I have already written my own solution for this, but I'm wondering if there are no better/easier/shorter ways of doing this. Extracted data will then be used to create Book object, throw every Book into array of books and print it with swing. Here's the code :
private static Book[] addBook(Book b, Book[] bookTab){
Book[] tmp = bookTab;
bookTab = new Book[tmp.length+1];
for(int i = 0; i < tmp.length; i++){
bookTab[i] = tmp[i];
}
bookTab[tmp.length] = b;
return bookTab;
}
public static void main(String[] args) {
Book[] books = new Book[0];
try {
BufferedReader file = new BufferedReader(new FileReader("K:\\books.txt"));
String s;
while ((s = file.readLine()) != null) {
int hei, thick, R, G, B;
String tit;
hei = Integer.parseInt(s.substring(0, 3).replaceAll(" ", ""));
thick = Integer.parseInt(s.substring(4, 6).replaceAll(" ", ""));
R = Integer.parseInt(s.substring(10, 13).replaceAll(" ", ""));
G = Integer.parseInt(s.substring(14, 17).replaceAll(" ", ""));
B = Integer.parseInt(s.substring(18, 21).replaceAll(" ", ""));
tit = s.substring(26);
System.out.println(tyt+wys+grb+R+G+B);
books = addBook(new Book(wys, grb, R, G, B, tyt),books);
}
file.close();
} catch (IOException e) {
//do nothing
}
}
I have CSV file with sample data in this form
That's not a CSV file. That's a "fixed-width formatted" file.
I'm wondering if there are no better/easier/shorter ways of doing this
Use a real CSV file format. Then parsing/formatting would be easy with lot of available Java CSV API's. For example OpenCSV. You can even use it to convert between a List of beans (like as Book in your case) and a CSV file.
(from a comment) the file is already created and I must keep it in that form. What about regex ?
Regex would only make things worse, since it's not in a regular format, but in a fixed format! If you can't change the format, even not to CSV, then, well, your approach is as far fine. I would only replace replaceAll(" ", "") by trim() since that's efficienter (the one is regex, the other is just parsing). Replacing Book[] by List<Book> is also a good suggestion, it's more easy to add another book. You can then just do books.add(book). Also see the Collections tutorial.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With