gpt4 book ai didi

java - 如何使用java删除特定值中的列

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

我想制作 Na 删除的二维数组。如果 NA 位于第五列第二行,那么我想删除第二行。我的代码的步骤]第一步:数据加载(一维数组)第2步:制作二维数组第3步:找到特定值的列和行第4步:从数组中删除其行

但是结果太糟糕了..帮助我

public static String[][] removeNA(String[][] str,int varNumber){
String deleteMe="NA";
String[][] na2Arr= new String[varNumber][str.length/varNumber];
for(int i=0;i<varNumber;i++)
{
for(int j=0;j<str.length/varNumber;j++){
String tmp=str[i][j];
if(tmp.equals(deleteMe))//참이면 [i,j] 중 j가 포함된거 모두 제거
{
for(int k=0;k<varNumber;k++){
String tmp1=str[k][j+1];
na2Arr[k][j]=tmp1;
}
}
else{
for(int k=0;k<varNumber;k++){
String tmp1=str[k][j];
na2Arr[k][j]=tmp1;
}
}
}
}
return na2Arr;
}


public static void main(String[] args) {
String str = readCSV(new File("D:/sample2.csv"));
String[] strArr = parse(str); // String 배열에 차곡차곡 담겨서 나온다.
int varNumber = 45;
int rowNumber = strArr.length/varNumber;
String[][] Array2D = new String[varNumber][rowNumber];


for(int i=0; i<rowNumber;i++)
{
for(int j=0;j<varNumber;j++)
{
String k = strArr[i*varNumber+j];
Array2D[j][i]= k;
}
}
String[][] naArray2D=removeNA(Array2D,varNumber);

/* for(int i=0; i<naArray1D.length;i++){
System.out.println(naArray1D[i]);
}*/
for(int i=0;i<varNumber;i++){
for(int j=0;j<naArray2D.length/varNumber;j++){
System.out.println(naArray2D[i][j]);
}
System.out.println("**********************N A제거&2차원 배열**********************");
}


}

最佳答案

这应该可以解决它:

public static String[][] removeNA(String[][] str, int varNumber) {
String[][] na2Arr = new String[str.length][varNumber];
// iterate over columns in str
int columnsCopied = 0;
for (int col = 0; col < varNumber; col++) {
if (! columnContainsNa(col, str)) {
// copy column to result
for (int row = 0; row < str.length; row++) {
na2Arr[row][columnsCopied] = str[row][col];
}
columnsCopied++;
}
}
if (columnsCopied < varNumber) {
// shorten each inner array to the actual number of columns (leave out if you don’t want this)
for (int row = 0; row < str.length; row++) {
na2Arr[row] = Arrays.copyOf(na2Arr[row], columnsCopied);
}
}
return na2Arr;
}

private static boolean columnContainsNa(int col, String[][] str) {
String deleteMe = "NA";
for (int row = 0; row < str.length; row++) {
if (str[row][col].equals(deleteMe)) {
return true;
}
}
return false;
}

我将变量名ij更改为rowcol,我认为这样更容易阅读方式。即使更多列包含 NA 并被删除,columnsCopied 变量也可确保将每列复制到结果数组的右列中。另外我认为使用辅助方法columnContainsNa更简单。

如果您认为答案正确且有帮助,请记得将答案标记为已接受(在左侧的勾号上)。

关于java - 如何使用java删除特定值中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40837274/

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