将 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-
按
;
拆分以获取行。
循环它们,增加一个计数器(例如x
)
-
按
,
拆分以获取每一行的值。
循环这些值,增加一个计数器(例如y
)
解析每个值(例如,使用Integer
的parseInt
方法之一)并将其添加到数组的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
并在nextString
和next
之间切换。最大的挑战是在到达行终止分号之前,您不会知道每行中的元素(列)数
【讨论】:
【参考方案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 数组?