我有一个 CSV 文件,我正在读取文件中的元素
每一行转成List,其中一列是很长的数据,但是Java读进去了
2.01005E+14格式,我无法将其转换为long,有没有办法只将该值转换为long?
这是 CSV 中的值 201005300149580。
代码,我的 CSV 类
package com.gta.moneyb.util;
import java.util.ArrayList;
import java.util.List;
public class CSV {
public static final char DEFAULT_SEP = ',';
/** Construct a CSV parser, with the default separator (`,'). */
public CSV() {
this(DEFAULT_SEP);
}
/** Construct a CSV parser with a given separator.
* @param sep The single char for the separator (not a list of
* separator characters)
*/
public CSV(char sep) {
fieldSep = sep;
}
/** The fields in the current String */
protected List<String> list = new ArrayList<String>();
/** the separator char for this parser */
protected char fieldSep;
/** parse: break the input String into fields
* @return java.util.Iterator containing each field
* from the original as a String, in order.
*/
public List<String> parse(String line)
{
StringBuffer sb = new StringBuffer();
list.clear(); // recycle to initial state
int i = 0;
if (line.length() == 0) {
list.add(line);
return list;
}
do {
sb.setLength(0);
if (i < line.length() && line.charAt(i) == '"')
i = advQuoted(line, sb, ++i); // skip quote
else
i = advPlain(line, sb, i);
list.add(sb.toString());
i++;
} while (i < line.length());
return list;
}
/** advQuoted: quoted field; return index of next separator */
protected int advQuoted(String s, StringBuffer sb, int i)
{
int j;
int len= s.length();
for (j=i; j<len; j++) {
if (s.charAt(j) == '"' && j+1 < len) {
if (s.charAt(j+1) == '"') {
j++; // skip escape char
} else if (s.charAt(j+1) == fieldSep) { //next delimeter
j++; // skip end quotes
break;
}
} else if (s.charAt(j) == '"' && j+1 == len) { // end quotes at end of line
break; //done
}
sb.append(s.charAt(j)); // regular character.
}
return j;
}
/** advPlain: unquoted field; return index of next separator */
protected int advPlain(String s, StringBuffer sb, int i)
{
int j;
j = s.indexOf(fieldSep, i); // look for separator
if (j == -1) { // none found
sb.append(s.substring(i));
return s.length();
} else {
sb.append(s.substring(i, j));
return j;
}
}
}
要解析包含 long 的字符串,您需要使用 Long.parseLong()
String text = "201005300149580";
long number = Long.parseLong(text);
问题出在 CSV 文件上,我在记事本中使用上述值创建了一个 CSV 文件,结果正常
我总是建议使用 CSVReader 来完成解析和创建 csv 文件的棘手任务。
长的记忆中应该是正确的。
打印出来的时候你看错了。
使用 DecimalFormat 和您喜欢的格式将其转换为 String,您会看到它是正确的
double doubleValue = Double.valueOf("2.01005E+14");
long longValue = (long) doubleValue;
String actualValue = String.valueOf(longValue);