尝试从csv文件读取数字时遇到以下问题。 数字格式正确,小数点也正确(点):
10;111.1;0.94
9.5;111.1;0.94
9;111.4;0.94
8.5;110.7;0.94
我逐行读取文件并将它们分成三个标记,没有空格等(例如“10”,“111.1”,“0.94”)。尽管如此,我在调用解析函数时遇到了异常:
Double pwr = Double.parseDouble(tokens[1]);
Double control = Double.parseDouble(tokens[0]);
Double cos = Double.parseDouble(tokens[2]);
java.lang.NumberFormatException: For input string: "10"
当我改变行的顺序时,例如,1< - > 2,问题仍然存在,但现在我得到java.lang.NumberFormatException: For input string: "9.5"
有趣的是,每次从调试器级别进行上述调用时,我都会获得正确的值,没有异常。它看起来像是与第一行文件相关的问题。
您知道问题来源在哪里吗?
答案 0 :(得分:0)
这可能是一个不可打印的Eigen::Vector2i temp1(Eigen::Vector2i::Zero());
Eigen::Vector2i temp2(0,0);
// initialize all elements with a Zero vector:
std::vector<Eigen::Vector2i> currTriangle(3, Eigen::Vector2i::Zero());
currTriangle[0].setZero(); // set 0th element to Zero vector
currTriangle[0].setConstant(0); // equivalent to setZero, but works for arbitrary constants
currTriangle[0].array() = 0; // .array() lets you do element-wise operations
字符
要删除此功能,您可以简单地使用此类的replaceAll方法,并使用以下正则表达式删除 ASCII
\\P{Print}
运行以下RegEx后,您应该能够解析值
=============================================== ============================
要查看它是哪个角色,您可以试试这个。
1)读取该行并按原样打印。
BufferedReader br = new BufferedReader(new FileReader(""));
String str=br.readLine();
str=str.replaceAll("\\P{Print}", "");
<强>输出:强>
2)现在按原样复制输出并将其粘贴到public class Test {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new FileReader("/path/to/some.csv"));
String str=br.readLine();
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
}
}
}
(双引号)
正如您所见,现在可以看到特殊字符
答案 1 :(得分:0)
[已解决] 据推测,这是文件开头的一些“隐藏”零长度字符的问题(BTW,谢谢您提供有用的建议!)。我将文件编码更改为UTF-8(菜单&gt;文件&gt;文件编码),这解决了问题。