2013-03-06 71 views
0

我正在具有以下输入的Java程序的一维数组:转换2D阵列到柱串

A V V V VV V V V 
E F V E VF E V E 
C D V C VD B V C 
A A V A VA G V A 
V D V V VD E V V 
A V V A VV V V A 

和下面的输出:

R 
R 

R 
R 
R 

R 

因此,一个R具有如果列中包含最少一个字母A-G,但是如果列中只有V,则必须打印空间。我的代码是:

Scanner inputc2 = new Scanner (new File("internalc")); 
int sss = 0; 

for (int i = 0; i < n; i++) { 
for (int j = 0; j < m; j++) { 
    try{ 
    matrix2[i][j] = inputc2.useDelimiter(" ").next().replaceAll(",", " "); 
     System.out.println(matrix2[i][j]); 
     temp2[sss] = matrix2[i][j];//change this 

     if(temp2[sss].indexOf("N") >= 0){ 
     pc2.println(temp2[sss].replaceAll("N","R")); 
     } 
     if(temp2[sss].indexOf(' ') >= 0){ 
     pc2.println(temp2[sss]); 
     } 
     sss++; 

    } 
    catch (java.util.NoSuchElementException e) { 
     // e.printStackTrace(); 
    } 
    } 

} 

在当前程序中的TEMP2 [SSS]是完全一样的矩阵2 [i] [j],但它必须是列的字符串。我希望你能帮助我。

亲切的问候, 比约恩

+1

使用''替换的(),而不是'的replaceAll()'。他们的名字非常模糊,他们应该为replaceAll()替换replace()和replaceRegex()来使用'replaceAll()'。 – 2013-03-06 13:23:22

回答

1

继承人的一个范例程序我写来完成, 输出可能不完全一样替换此行

temp2[sss] = matrix2[i][j]; 

你的期望,很好地适应你的需求的正则表达式

public static void main(String[] args) throws Exception { 

    Pattern pattern = Pattern.compile("[A-G]+[A-G]{0,1}"); 
    Pattern pattern2 = Pattern.compile("[V]+[V]*"); 

    BufferedReader br = new BufferedReader(new FileReader(new File("test.txt"))); 
    String line; 
    while ((line = br.readLine()) != null) { 
     StringBuffer sf = new StringBuffer(); 

     //System.out.println(line);   
     String[] tempArr = line.split(" "); 
     //System.out.println(tempArr.length); 

     for(String s : tempArr){ 
      Matcher matcher = pattern.matcher(s); 
      Matcher matcher2 = pattern2.matcher(s); 
      if (matcher.find()) { 
       sf.append("R"); 
      }else if(matcher2.find()) { 
       sf.append(" "); 
      } 
     } 
     System.out.println(sf); 
    } 
    br.close(); 
} 

编辑2

你去那里

public static void main(String[] args) throws Exception { 

    Pattern pattern = Pattern.compile("[A-G]+"); 
    Pattern pattern2 = Pattern.compile("[V]+"); 

    List<String[]> mat = new ArrayList<String[]>(); 
    String[] row1 = { "A", "V", "V", "V", "VV", "V", "V", "V" }; 
    String[] row2 = { "E", "F", "V", "E", "VF", "E", "V", "E", }; 
    String[] row3 = { "C", "D", "V", "C", "VD", "B", "V", "C" }; 
    String[] row4 = { "A", "A", "V", "A", "VA", "G", "V", "A" }; 
    String[] row5 = { "V", "D", "V", "V", "VD", "E", "V", "V" }; 
    String[] row6 = { "A", "V", "V", "A", "VV", "V", "V", "A" }; 

    mat.add(row1); 
    mat.add(row2); 
    mat.add(row3); 
    mat.add(row4); 
    mat.add(row5); 
    mat.add(row6); 

    int rowSize = 6; 
    int colSize = 8; 

    String[][] matrix = mat.toArray(new String[rowSize][colSize]); 

    for (int i = 0; i < colSize; i++) { 

     StringBuffer sf = new StringBuffer(); 
     for (int j = 0; j < rowSize; j++) { 
      sf.append(matrix[j][i]); 

     } 

     Matcher matcher = pattern.matcher(sf.toString()); 
     Matcher matcher2 = pattern2.matcher(sf.toString()); 

     if (matcher.find()) { 
      System.out.println("R"); 
     } else if (matcher2.matches()) { 
      System.out.println(" "); 
     } 

    } 

} 

结果:

R 
R 

R 
R 
R 

R 
+0

您的程序正在使用fileinput作为字符串,而不是数组[] []。现在输出只是用R替换A-G。如果一列包含A-G,则我所需的输出为R,如果列不包含A-G的一个实例,则输出一个空格。所以我仍然需要真正的解决方案。 – user1189952 2013-03-06 16:25:11

+0

检查我的编辑..并请评价并接受,如果这有助于欢呼 – Sudhakar 2013-03-06 17:48:13

+0

您的解决方案的作品。谢谢。但是当我试图在更大的程序中使用代码时,当它调用matrix [j] [i]时,我得到一个java.lang.NullPointerException。你有什么想法我做错了吗? – user1189952 2013-03-06 23:48:26

1

您可以通过

List<Integer> temp2 = new ArrayList<Integer>(); 
temp2.add(matrix2[i][j]); 
int[] vector = new int[temp2.size()]; 
for (int i = 0; i < vector.length; i++) { 
    vector[i] = temp2.get(i); 
}