在主方法的测试类中,参数设置为文件名(该文件包含整数数据)
以下是代码片段:
static Main main = new Main();
static
{
String[] args = {"../data/filename.txt"};
main.main(args);
}
由于文件名是作为参数传递给main方法的,因此文件名的类型为String[]。需要解析此文件(或任何其他可能的方法)以获取信息。为了做到这一点,我用扫描仪逐行查看。
public static void main( String[] args )
{
List<Integer> left = new ArrayList();
List<Integer> right = new ArrayList();
try {
Files.lines(Paths.get("filename.txt"))
.map(l -> l.split("\s"))
.forEachOrdered(l -> {
left.add(Integer.parseInt(l[0]));
right.add(Integer.parseInt(l[1]));
});
} catch (NumberFormatException | IOException e) {
e.printStackTrace();
}
int[] leftArray = left.stream().mapToInt(Integer::intValue).toArray();
int[] rightArray = right.stream().mapToInt(Integer::intValue).toArray();
}
这里的问题是,我已经将文件名硬编码到了Files.lines(Paths.get("filename.txt"))中,这是我不想要的。
由于文件名是作为参数传递的,并且它的类型是String[],所以我不能使用args作为文件扫描程序的参数。我的问题是,如何从String[]转换为String?或者有没有一种更简单的方法来解析信息?(请记住,文件名将是main的参数)
您是否在询问如何对args
数组进行索引?只需这样做:
Files.lines(args[0])
附带说明一下,在测试类中实例化Main
是没有意义的。只需静态调用方法:
static
{
String[] args = {"../data/filename.txt"};
Main.main(args);
}
您只是想从String[](数组)中取出元素吗?
java中的参数应该是这样的:
Args[0]-始终程序名Args[1,2..]-参数
所以我认为您应该将第一个代码更改为:
static Main main = new Main();
static
{
String[] args = {"Main","../data/filename.txt"};
main.main(args);
}
和第二代码
public static void main( String[] args )
{
List<Integer> left = new ArrayList();
List<Integer> right = new ArrayList();
try {
Files.lines(Paths.get(args[1]))
.map(l -> l.split("\s"))
.forEachOrdered(l -> {
left.add(Integer.parseInt(l[0]));
right.add(Integer.parseInt(l[1]));
});
} catch (NumberFormatException | IOException e) {
e.printStackTrace();
}
int[] leftArray = left.stream().mapToInt(Integer::intValue).toArray();
int[] rightArray = right.stream().mapToInt(Integer::intValue).toArray();
}
这是一个很好的改变,所以当你接受"真实"的论点时,它不会停止工作。否则它会取程序名。