从2D char数组中获取一定数量的字符

时间:2015-04-24 18:11:49

标签: java arrays char

我有一个2D字符数组,我想在每个嵌套数组中打印每五个字符的前三个字符。这就是我在做的事情:

char [][] one ={ {'a','b','c','d','e','f','g','h','3'},{'i','j','k','l','m','n','o','p','7'},{'q','r','s','t','u','v','w','x','2'}};

int aSize=5;
char [] firstThree=new char[3];
for (int i=0; i< one.length;i++){
    for (int j=0; j< aSize;j++){
        for(int m=0; m<3;m++){
            firstThree[m]=one[i][m];
        }
    }

    System.out.print(firstThree);
    System.out.println(""); 
}

这给出了以下输出:

abc
ijk
qrs

我想要输出:

abc
fgh
ijk
nop
qrs
vwx

4 个答案:

答案 0 :(得分:0)

你可以这样做:

for (int j=5; j < 8;j++){
    firstThree[j-5]=one[i][j];
}

你不需要3个循环来做这件事......

答案 1 :(得分:0)

您可以创建另一个数组,以便在5个索引后读取,如:

<package id="Foo" version="1.0.0-dev1401291727ef87505" />

答案 2 :(得分:0)

这可以动态地完成它,因此它可以用于更长的输入长度。

请注意,第三个嵌套循环不是必需的,您只需要完全遍历每个嵌套数组,使用count变量来跟踪您在每个五个中添加前三个的问题字符。

请注意,我还使用ArrayList<String>来跟踪应该打印的三个字符序列,但这不是必需的,您可以直接在(count == 3)情况下打印。 / p>

import java.util.ArrayList;

public class PrintThreeOfFive
{
  public static void main(String[] args)
  {
     char [][] one ={ {'a','b','c','d','e','f','g','h','3'},{'i','j','k','l','m','n','o','p','7'},{'q','r','s','t','u','v','w','x','2'}};

     int aSize=5;
     ArrayList<String> output = new ArrayList<String>();
     char [] firstThree=new char[3];
     for (int i=0; i< one.length;i++){
         int count = 0;
         for (int j=0; j < one[i].length; j++){

           //re-set count at the 5th character
           if (count == 4){ 
             count = 0;
             continue; //continue so that the fifth character is not added
           }

           //if in first three of five, add it to firstThree
           if (count < 3){
             firstThree[count]=one[i][j];
           }

           //increment count, and add to the list if at the third character
           count++;
           if (count == 3){
             output.add(new String(firstThree));
           }

         }
     }

    for (String s : output){
        System.out.println(s);
    }
  }
}

输出:

abc
fgh
ijk
nop
qrs
vwx

答案 3 :(得分:0)

我认为@Masud很接近,但他的解决方案有一些运行时错误。请稍微改变你的索引来解决这个问题。

  for(int m=0; m<3;m++){
     firstThree[m]=one[i][m];
     nextThree[m]=one[i][m+5];
 }

Demo