我已经创建了一个“Loader”类(不言自明,但它从文件夹中加载文件),并且由于我必须将加载的字符串转换为非常常见的整数数组,所以我想添加一个方法那个做那个的班级。
之前我已经看过以下内容,并且也使用了很多:
String s = "";
int length = s.toLowerCase().length();
而不是:
String s = "";
String lowercase = s.toLowerCase();
int length = lowercase.length;
但是当我尝试在Loader类中使用此方法时:
public int[][] initMatrix() {
return new int[20][20];
}
我收到一个错误(可能很明显为什么,但我无法绕过它)。
使用它的正确方法是什么?
编辑:这是我打算使用的课程:
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
public class Loader {
public String[] loadStrings(String fileName) {
String[] ret = null;
try {
ret = Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8).toArray(new String[0]);
} catch (IOException e) {
e.printStackTrace();
}
return ret;
}
public int[][] initMatrix() {
}
}
我尝试使用:
int[][] foo = new Loader().loadStrings().initMatrix();
编辑#2:我为这个令人困惑的问题道歉。我只是想不通为什么这个单线工作:
char c = "World".toLowerCase().charAt(0);
当您将System.out.println()发送到控制台时,最终会得到一个小写“w”,只有“w”。因此,在一行中,执行了2个步骤。显然有两种方法在起作用。
为什么会发生这种情况?
答案 0 :(得分:2)
好的,
int[][] foo = new Loader().loadStrings().initMatrix();
loadStrings返回一个字符串数组,initMatrix位于Loader类上。你不能像这样把它们连在一起。
尝试
Loader loader = new Loader();
loader.loadStrings ();
foo = loader.initMatrix ();
如果要组合这些步骤,可以在Loader中创建一个新方法,或者从构造函数中调用步骤
e.g。
Public int [][] doMyStuff () {
loadStrings ();
return initMatrix ();
}
答案 1 :(得分:0)
你想要的可能是这样的:
public class Loader
{
private String[] strings;
public Loader loadStrings(final String filename)
{
// initiate, fill "strings", then:
return this; // Here is the "magic" stuff
}
public int[][] initMatrix()
{
// whatever
}
}
但这是一个不稳定的设计;例如,如果您在致电.loadStrings()
之前没有.initMatrix()
该怎么办?您最好制作一个调用initMatrix(String fileName)
的{{1}}方法,该方法将成为loadStrings()
。这是一个解决方案,还有其他解决方案。