我有一个包含以下格式的数据的文件:
12345foo \n
24561bar \n
12783apples \n ect.
为了处理这些数据,我正在使用bufferedreader将其读入程序,并使用以下代码将其放入2D数组中:
line = bRead.readLine();
2DArray[x][y] = line.substring(0,5);
2DArray[x][z] = line.substring(5,line.length());
我不确定为什么line.length显然在这个例子中给了我(line.length() - 5)
。
答案 0 :(得分:0)
你应该这样做:
line.substring(5);
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int)
public static void main(String[] args) {
BufferedReader bR = null;
try {
bR = new BufferedReader(new FileReader("teste.txt"));
Map<String, String> txt = new HashMap<String, String>();
String line;
while ((line = bR.readLine()) != null) {
txt.put(line.substring(0, 5), line.substring(5));
}
txt.forEach((k, v) -> System.out.println(k + " - " + v));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bR != null) {
try {
bR.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Output:
24561 - bar
12345 - foo
12783 - apples
答案 1 :(得分:0)
如果我必须批准并审核您的代码,我的第一个问题是“您为什么使用数组?”将逻辑上属于一起分成2D阵列或Map的数据拆分是我认为不好的代码。您显然有一个带有ID和名称的订单项,因此您应该拥有此类对象的域模型。 这就是我要做的。
package com.example
import java.io.BufferedReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) throws Exception {
String data = "12345foo\n" +
"24561bar\n" +
"12783apples\n";
BufferedReader br = new BufferedReader(new StringReader(data));
String line = null;
List<LineItem> items = new ArrayList<>();
while (null != (line = br.readLine())) {
int id = Integer.parseInt(line.substring(0, 5));
String name = line.substring(5);
items.add(new LineItem(id, name));
}
items.forEach(lineItem -> System.out.println(lineItem));
}
public static class LineItem {
private final int id;
private final String name;
public LineItem(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "LineItem{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
}
答案 2 :(得分:0)
在java中,line.substring()使用第一个paramiter来确定从开始的偏移量,并使用第二个paramiter来确定从开始的偏移量。例如,
String foo = "barAndSomeOtherStuff";
System.out.print(foo.substring (5, 12));
输出&#34; dSomeOt&#34;,而不是&#34; dSomeOtherSt。&#34;
这样的问题的一个好主意是在你来到像StackOverflow这样的地方之前检查文档!