这是一个程序,用于确定任何给定随机数组上的最大行和列。 我不确定最后3行代码是做什么的。
我知道它们是正则表达式的一部分,但似乎无法找到显示这意味着“^ \ d,]”的资源 谁能解释这3行代码中发生了什么?
的System.out.println(Arrays.deepToString(矩阵).replaceAll( “[^ 01 \]]”, “”)的replaceAll( “]”, “\ n”)); System.out.println(“最大行索引:”+ rowIndices.toString()。replaceAll(“[^ \ d,]”,“”)); System.out.println(“最大列索引:”+ colIndices.toString()。replaceAll(“[^ \ d,]”,“”));
public class LargestRowsColumnsTest {
public static void main (String[] args){
Random rand = new Random(System.currentTimeMillis());
Scanner input = new Scanner(System.in);
System.out.print("Enter array size n: ");
int n = input.nextInt();
int maxRowValue=0;
int maxColValue=0;
int [][] matrix = new int[n][n];
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
matrix[i][j]= rand.nextInt(100)%2;
}
}
int[]rowsSum = new int[n];
int[]colsSum = new int[n];
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
rowsSum[i]=rowsSum[i]+matrix[i][j];
colsSum[i]=colsSum[i]+matrix[j][i];
}
if(maxRowValue<rowsSum[i])maxRowValue=rowsSum[i];
if(maxColValue<colsSum[i])maxColValue=colsSum[i];
}
List<Integer> rowIndices = new ArrayList<>();
List<Integer> colIndices = new ArrayList<>();
for (int i=0;i<n;i++){
if(rowsSum[i]==maxRowValue)rowIndices.add(i);
if(colsSum[i]==maxColValue)colIndices.add(i);
}
System.out.println("The random array is: ");
System.out.println(Arrays.deepToString(matrix).replaceAll("[^01\\]]","").replaceAll("]","\n"));
System.out.println("Largest row index: " + rowIndices.toString().replaceAll("[^\\d,]",""));
System.out.println("Largest column index: " + colIndices.toString().replaceAll("[^\\d,]",""));
}
}
答案 0 :(得分:1)
\d
是一个数字(相当于[0-9]
),[]
是一个字符组,而字符组中的^
表示不是。
所以[^\d]
表示不是数字,或等同于[^0-9]
。
在String文字中,您需要转义\。
供您参考: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html