Java 如何将一行中的每个字符从文本文件读取到二维矩阵?
我有一个如下所示的文本文件:Java 如何将一行中的每个字符从文本文件读取到二维矩阵?,java,string,matrix,inputstream,bufferedreader,Java,String,Matrix,Inputstream,Bufferedreader,我有一个如下所示的文本文件: abcd efgh ijkl 我需要创建String[]resultMatrix=newstring[3][4]存储值,使每一行都是一行,每一行中的每个字符都是该行的一个元素,但我并不总是提前知道矩阵的维度 我所拥有的返回一个字符串,但我需要一个3x4矩阵: 公共静态字符串[][]readTxt(字符串文件名)引发IOException{ InputStream文件=新文件InputStream(文件名); BufferedReader buffer=新的Buff
abcd
efgh
ijkl
我需要创建String[]resultMatrix=newstring[3][4]
存储值,使每一行都是一行,每一行中的每个字符都是该行的一个元素,但我并不总是提前知道矩阵的维度
我所拥有的返回一个字符串,但我需要一个3x4矩阵:
公共静态字符串[][]readTxt(字符串文件名)引发IOException{
InputStream文件=新文件InputStream(文件名);
BufferedReader buffer=新的BufferedReader(新的InputStreamReader(文件));
String line=buffer.readLine();
StringBuilder sb=新的StringBuilder();
行=空;
而((line=buffer.readLine())!=null){
sb.追加(第+行“\n”);
}
String fileString=sb.toString();
fileString=fileString
.replaceAll(“\r”,”)
.replaceAll(“\n>[A-Z]+”,“>”)
.replaceAll(“[0-9]+\n”,”);
String[]line=fileString.split(“>”);
字符串[][]结果矩阵=新字符串[lines.length][lines[0].length()];
对于(int i=0;i
你把事情弄得极其复杂
编辑:将collect to list
->list to array
转换为直接在流上调用toArray
public static String[][] readTxt(String fn) throws IOException {
return Files.lines(Paths.get(fn))
.map(s -> s.split(""))
.toArray(String[][]::new);
}
逐步:
Files.line(path.get(fn))
在中读取整个fn
文件,并逐行处理
.map(s->s.split(“”)
通过调用.split(“”
)将字符串转换为字符串[]-split将字符串拆分到某个分隔符上,如果将空字符串作为分隔符传递,则每个字符都会被分隔开。我们现在有一个字符串数组流
.toArray(字符串[]:[]::新建)
将流转换为数组。这需要告诉
toArray
方法如何构造正确大小的新数组String[]]::new
是java ese的意思:在给定单个int参数(大小)的情况下调用new String[X][]
的概念。与中一样,String[]]::new
不会创建新数组。它代表了创建它们的概念(它是一个方法引用:它代表了编写新字符串[X][]
)的思想)。如果您有一个字符串数组,则可以将其转换为二维字符数组,如下所示:
String[]行={“abcd”、“efgh”、“ijkl”};
字符串[][]resultMatrix=Arrays.stream(行)
.map(str->str.codePoints()
.mapToObj(字符::toString)
.toArray(字符串[]::新建))
.toArray(字符串[]:[]::新建);
System.out.println(Arrays.deepToString(resultMatrix));
//[a,b,c,d],[e,f,g,h],[i,j,k,l]]
为什么要使用列表执行中间步骤?您也可以这样做:.map(s->s.split(“”)代码>甚至更好-我快速查看了收集器
,有点惊讶于我没有在那里找到toArray函数。有点奇怪,它本身就嵌入到流中。将编辑。