将 String 转换为 2D int 数组

Posted

技术标签:

【中文标题】将 String 转换为 2D int 数组【英文标题】:Convert String into 2D int array 【发布时间】: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 【参考方案1】:
    ; 拆分以获取行。 循环它们,增加一个计数器(例如x
      , 拆分以获取每一行的值。 循环这些值,增加一个计数器(例如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]);
           
    

【讨论】:

以上是关于将 String 转换为 2D int 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将 2D float numpy 数组转换为 2D int numpy 数组?

将 int 数组转换为 String 数组

如何把一个byte数组的数字转换成int

cocos2d-x类型转换(CCstring int string char UTF-8互转)

mfc中,如何将CString 转换成 string

将数组值从字符串转换为int?