所以我正在创建文件读取器/写入器,可以访问给定的文件并保存/读取它.我在从文件读取时遇到问题.内容是整数,字符串和双由"|"分隔 分隔符.我正在使用StringTokenizer来分隔令牌并将它们保存到每个单独的变量中,但是当我读取整数时,我得到一个NumberFormatException,即使该字符串只包含一个int.
这是代码:
FileReader fr = new FileReader(filename);
BufferedReader buff = new BufferedReader(fr);
String line;
while ((line = buff.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, "|");
while (st.hasMoreElements()) {
int Id = Integer.parseInt(st.nextToken());
String Name = st.nextToken();
double cordX = Double.parseDouble(st.nextToken());
double cordY = Double.parseDouble(st.nextToken());
}
}
Run Code Online (Sandbox Code Playgroud)
该文件的示例行:
8502113|Aarau|47.391355|8.051251
Run Code Online (Sandbox Code Playgroud)
而错误:
java.lang.NumberFormatException: For input string: "8502113"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at storage.FileUtilities.readCitiesFromFile(FileUtilities.java:63)
at basics.Test.main(Test.java:16)
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?StringTokenizer是否以某种我不知道的方式篡改字符串?
编辑:这是创建文件的代码:
FileWriter fw = new FileWriter(filename, !overwrite); // For FileWriter true = …Run Code Online (Sandbox Code Playgroud) 我知道构造函数链是从最小的构造函数到最大的构造函数.例如
public MyChaining(){
System.out.println("In default constructor...");
}
public MyChaining(int i){
this();
System.out.println("In single parameter constructor...");
}
public MyChaining(int i,int j){
this(j);
System.out.println("In double parameter constructor...");
}
Run Code Online (Sandbox Code Playgroud)
另外据我所知,调用this()并且super()必须在第一行.但绕过那个限制和链构造函数是否可能(并且如果是,是否有效)?
例如,我有两个共享一些代码的构造函数.
public Location(String _Name) throws IOException, JSONException {
//Three lines of unique code (must be executed before the shared code)
//Shared code
}
public Location(JSONObject json) {
//Shared code
}
Run Code Online (Sandbox Code Playgroud)
第一个构造函数可以以任何方式调用第二个构造函数吗?
我试图从连接创建一个表,并基于id总结一些字段.这部分工作得很好.我还试图添加一个额外的列并使用case语句我想填充它.
这是脚本
CREATE TABLE TABLE1
AS
SELECT ID, IDC, SUM(AMOUNT) PRICE, SUM(COST) COST, SUM(AMOUNT-COST) PROFIT,
CASE PROFIT
WHEN PROFIT < 1000 THEN 'Low'
WHEN PROFIT < 5000 THEN 'Medium'
ELSE 'High'
END AS PROFITLEVEL
FROM
(SELECT DISTINCT ID, IDC, AMOUNT, COST
FROM ORDER_ITEMS
LEFT JOIN ORDERS
ON ID = IDC)
GROUP BY ID, IDC;
Run Code Online (Sandbox Code Playgroud)
但是,这会返回ORA-00905:缺少关键字错误.
任何帮助,将不胜感激