【问题标题】:Convert String into 2D int array将 String 转换为 2D int 数组
【发布时间】:2013-01-08 20:28:08
【问题描述】:

我在将 String 转换为二维 int 数组时遇到问题。
假设我有:

String x = "1,2,3;4,5,6;7,8,9"

(在我的程序中,它将是来自文本区域的字符串。)我想创建数组n x n

int[3][3] y = {{1,2,3},{4,5,6},{7,8,9}} 

(下一阶段需要。)我尝试拆分字符串并创建一维数组,但我不知道下一步该做什么。


正如你所建议的,我首先尝试使用; 然后, 进行拆分,但我的解决方案不是很好。仅当有3 x 3 表时才有效。如何创建循环制作字符串数组?

public int[][] RunMSTFromTextFile(JTextArea ta)
    {
        String p = ta.getText();
        String[] tp = p.split(";");

        String tpA[] = tp[0].split(",");
        String tpB[] = tp[1].split(",");
        String tpC[] = tp[2].split(",");

        String tpD[][] = {tpA, tpB, tpC};

        int matrix[][] = new int[tpD.length][tpD.length];

        for(int i=0;i<tpD.length;i++)
        {
            for(int j=0;j<tpD.length;j++)
            {
                matrix[i][j] = Integer.parseInt(tpD[i][j]);
            }
        }
        return matrix;
    }

【问题讨论】:

  • 你必须使用 split by ;然后对于数组中的每个条目,由 ,
  • 使用split 听起来像是一个可以走得更远的想法。
  • 当我只使用逗号进行分割时:' public int[] RunMSTFromTextFile(JTextArea ta) { String p = ta.getText();字符串[] tp = p.split(",");整数矩阵 [] = 新整数 [tp.length]; for(int i=0;i

标签: java multidimensional-array type-conversion


【解决方案1】:
  1. ; 拆分以获取行。
  2. 循环它们,增加一个计数器(例如x
    1. , 拆分以获取每一行的值。
    2. 循环这些值,增加一个计数器(例如y
      • 解析每个值(例如,使用IntegerparseInt 方法之一)并将其添加到数组的x,y

【讨论】:

  • +1 领先而不用勺子喂食。可能应该包含解析方法的名称。
【解决方案2】:

使用 split 后,查看Integer.parseInt() 以获取数字。

String lines[] = input.split(";");
int width = lines.length;
String cells[] = lines[0].split(",");
int height = cells.length;
int output[][] = new int[width][height];

for (int i=0; i<width; i++) {
    String cells[] = lines[i].split(",");
    for(int j=0; j<height; j++) {
        output[i][j] = Integer.parseInt(cells[j]);
    }
}

那么你需要决定如何处理NumberFormatExceptions

【讨论】:

  • 我相信你的意思是说String cells[]。
  • 刚刚转换为 C# 并为我解决了一个问题。谢谢!
【解决方案3】:

如果您已经创建了一个int[9] 并希望将其拆分为int[3][3]

for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    toArray[i][j] = fromArray[(3*i) + j);
  }
}

现在,如果二维数组不是矩形的,即所有外部数组的内部数组的大小不同,那么您需要做更多的工作。您最好使用Scanner 并在nextStringnext 之间切换。最大的挑战是在到达行终止分号之前,您不会知道每行中的元素(列)数

【讨论】:

    【解决方案4】:

    使用 2 个拆分的解决方案:

    String input = "1,2,3;4,5,6;7,8,9";
    
    String[] x = input.split(";");
    
    String[][] result = new String[x.length][];
    for (int i = 0; i<x.length; i++) {
        result[i] = x[i].split(",");
    }
    

    这给出了一个二维字符串数组,您需要在之后解析这些整数,这取决于您对这些数字的用途。以下解决方案显示了如何在构建结果时解析它们:

    String input = "1,2,3;4,5,6;7,8,9";
    
    String[] x = input.split(";");
    
    int[][] result = new int[x.length][];
    
    for (int i = 0; i < x.length; i++) {
        String[] row = x[i].split(",");
        result[i] = new int[row.length];
    
        for(int j=0; j < row.length; j++) {
            result[i][j] = Integer.parseInt(row[j]);
        }
    }
    

    【讨论】:

      【解决方案5】:

      超级简单的方法!!!

      package ADVANCED;
      import java.util.Arrays;
      import java.util.Scanner;
      
      public class p9 {
      
          public static void main(String[] args) {
              // TODO Auto-generated method stub
              Scanner sc=new Scanner(System.in);
      
              String x=sc.nextLine();
              String[] array = x.split(",");
              int length_x=array.length;
              int[][] two=new int[length_x/2][2];
      
              for (int i = 0; i <= length_x-1; i=i+2) {
                  two[i/2][0] = Integer.parseInt(array[i]);
              }
      
              for (int i = 1; i <= length_x-1; i=i+2) {
                  two[i/2][1] = Integer.parseInt(array[i]);
              }   
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多