gpt4 book ai didi

java - 将二维矩阵转换为列的字符串数组(java)

转载 作者:行者123 更新时间:2023-12-01 04:49:02 25 4
gpt4 key购买 nike

我对java中的ArrayLists了解不多。我需要解决以下问题:如何制作二维矩阵列的 array[] 。输入文件是:

V G V VV G V V V
E F V VF E V E V
VVVVVVVVV
A A V VA G V A D
V D V VD E V V V
A V V VV V V A V

Stringarray liner 所需的格式(见下文)是:

{"VEVAVA","GFVADV","VVVVVV","VVVFVVVAVDVV","GEVGEV","VVVVVV","VEVAVA","VVVDVV"}

我的代码是:

    ArrayList<String[]> mat = new ArrayList<String[]>();


Scanner scan = new Scanner(new File("internal2"));
String[] liner = new String[m];
while (scan.hasNextLine()) {

Scanner colReader2 = new Scanner(scan.nextLine());
while(colReader2.hasNext())
{
for(int i = 0; i<m; i++) {
liner[i] = colReader2.next();
//System.out.println(liner[i]);
mat.add(liner);
}

}
// scan.nextLine();
}

这样做的目的是我想在liner中搜索这些字符串。现在程序似乎只给出这样的liner:{"A","V","V","VV","V","V","A","V"}这是输入文件的最后一行。我希望你能帮助我。

编辑

我的代码继续:

Pattern pattern = Pattern.compile("[A-G]+");
Pattern pattern2 = Pattern.compile("[V]+");

String[][] matrix4 = mat.toArray(new String[n][m]);

for (int i = 0; i < m; i++) {

StringBuffer sf = new StringBuffer();
for (int j = 0; j < n; j++) {
sf.append(matrix4[j][i]);

}

Matcher matcher = pattern.matcher(sf.toString());
Matcher matcher2 = pattern2.matcher(sf.toString());

if (matcher.find()) {
System.out.println("R");
} else if (matcher2.matches()) {
System.out.println("Q");
}

}

因此,对于 liner 中至少包含 1 次 A-G 出现的列字符串,必须打印 R。对于仅包含 V 的列字符串,它必须打印 Q。那么输出应该是:

R
R
Q
R
R
Q
R
R

但这不是我得到的。你们有人知道我做错了什么吗?

已解决:

我必须使用 Arrays.fill(liner, ""); 来将 null 从衬垫中取出

最佳答案

Scanner.next() 仅扫描字符直到下一个空格。如果您想扫描整行,请使用 Scanner.nextLine(),它应该为您提供 “V G V VV G V V V”。要删除字符之间的空格,请使用 String.replaceAll("\s", "")

更新:抱歉,我误解了您的问题。

要获得所需的输出,请将 liner[i] = colReader2.next() 更改为 liner[i] += colReader2.next()

这应该将一个字符附加到数组条目而不是替换它。

更新#2:我测试了您的代码片段并发现了一些问题。

  • liner[i] 未使用空字符串初始化,这会导致输出 nullVEVAVA 等等...我没有检查这一点,抱歉.
  • 您不需要使用两台扫描仪,一台就足够了。
  • mat.add(liner) 仅添加对数组的引用,因此如果更改该数组,这些更改也将在 ArrayList 中可见
  • 一般来说,最好先解析输入文件,然后创建一个数组,因为您不必知道尺寸
  • 假设您想要一个字符串数组的 ArrayList 来保存输入的列(我假设它不是锯齿状的),这应该可以做到(好吧,至少它给了我所需的输出):

    ArrayList<String[]> input = new ArrayList<String[]>();

    Scanner sc = new Scanner(new File("input"));

    // read the input
    while (sc.hasNextLine()) {
    input.add(sc.nextLine().split("\\s"));
    }

    sc.close();

    // this only works if your input isn't jagged!
    String[][] mat = new String[input.get(0).length][];

    // transform your matrix from [line][column] to [column][line]
    for (int i = 0; i < input.size(); i++) {
    for (int j = 0; j < input.get(i).length; j++) {
    if (mat[j] == null) {
    mat[j] = new String[input.size()];
    }
    if (mat[j][i] == null) {
    mat[j][i] = "";
    }
    mat[j][i] += input.get(i)[j];
    }
    }

    Pattern pattern = Pattern.compile("[A-G]+");
    Pattern pattern2 = Pattern.compile("[V]+");

    for (int i = 0; i < mat.length; i++) {
    StringBuilder sb = new StringBuilder();
    for (int j = 0; j < mat[i].length; j++) {
    sb.append(mat[i][j]);
    }

    Matcher matcher = pattern.matcher(sb.toString());
    Matcher matcher2 = pattern2.matcher(sb.toString());

    if (matcher.find()) {
    System.out.println("R");
    } else if (matcher2.matches()) {
    System.out.println("Q");
    }
    }

如果这仍然没有帮助,我很抱歉,但我的时间和你的时间一样宝贵,我相信你可以通过做一些像样的研究来解决许多问题。但是,如果您真的遇到困难,只需回来问另一个问题,我们将很乐意帮助您;)

关于java - 将二维矩阵转换为列的字符串数组(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15327209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com