从整数中删除字符

时间:2016-10-22 20:03:48

标签: java oop hadoop exception mahout

FileDataModel接受格式为

的数据
 userId,itemId,pref(long,long,Double).

目前我有一些itemId,在数字的末尾包含一个'x'。 如何编辑某些itemID以删除“x”? 是否可以使用简单的try catch语句执行此操作?

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

}catch(NumberFormatException e){
    REMOVE X


}

CODE:

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

ERROR:

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)

DATA:

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

2 个答案:

答案 0 :(得分:1)

恕我直言,最简单的方法就是使用if语句:

String itemIdStr = "034545104X"; // for example
if (itenIdStr.endsWith("X")) {
    itemIdStr = itemIdStr.substring(0, itemIdStr.length() - 1);
}
long itemId = Long.parseLong(itemIdStr);

答案 1 :(得分: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更灵活。