2016-10-22 3 views
1

FileDataModel принимает данные в форматеУдалить символ из целого

userId,itemId,pref(long,long,Double). 

На данный момент у меня есть некоторые ItemId, которые состоят из «х» в конце номера. Как отредактировать элемент ItemID так, чтобы он удалял «x»? Можно ли сделать это с помощью простой инструкции try catch?

DataModel model = null; 
try{ 
    model = new FileDataModel(new File("book_data/BX-Book-Ratings.csv")); 

}catch(NumberFormatException e){ 
    REMOVE X 


} 

КОД:

DataModel model = new FileDataModel(new File("book_data/BX-Book-Ratings.csv")); 

ОШИБКА:

Exception in thread "main" java.lang.NumberFormatException: For input string: "034545104X" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Long.parseLong(Long.java:589) 
    at java.lang.Long.parseLong(Long.java:631) 

ДАННЫЕ:

276725,034545104X,0 
276726,155061224,5 
276727,446520802,0 
276729,052165615X,3 

ответ

1

Один из способов - запустить предварительный процессор в файле, который преобразует его содержимое, чтобы обеспечить его совместимость с FileDataModel. Если ваш формат данных очень прост, вы можете просто заменить регулярное выражение. В противном случае я бы предложил иметь парсер, который может привести данные в память, а затем выполнить ваши манипуляции с трансформатором и, наконец, сохранить результаты с помощью сериализатора.

Что-то вроде:

File file = new File("book_data/BX-Book-Ratings.csv"); 
FileDataModelTransformer transformer = new FileDataModelTransformer(); 
transformer.transformInPlace(file); 
DataModel model = new FileDataModel(file); 

Кстати, это более гибкой, чтобы полагаться на потоки или буферы, чем File.

1

Самый простой способ, имхо, было бы просто использовать, если заявление:

String itemIdStr = "034545104X"; // for example 
if (itenIdStr.endsWith("X")) { 
    itemIdStr = itemIdStr.substring(0, itemIdStr.length() - 1); 
} 
long itemId = Long.parseLong(itemIdStr); 
Смежные вопросы