0

重複の可能性:
Java で文字列を比較するにはどうすればよいですか?

次の文字列の 2D 配列 a[5][5] を考えてみましょう。

配列「a」の最初の 3 つのブロックに 3 つの値を格納します。配列を印刷すると、次の出力が得られます。

ABC

null

DEF

null

これらの値はファイルに存在し、値を取得して文字列の配列に格納します。

ファイル(「file.txt」)は次のようになります。

A B C

D E F

ここに私のコードがあります、

宣言:

static String [][] a= new String [4][4];
public static String newline = System.getProperty("line.separator");
private static int i,j;

メインコード:

i=j=0;
        FileInputStream fin;
        fin = new FileInputStream("file.txt");
        DataInputStream in = new DataInputStream (fin);
        BufferedReader br = new BufferedReader (new InputStreamReader (in));
        while((c = (char)br.read()) != (char)-1)
        {
            if (c != '  ' && c != (char)'\n')
            {
                a[i][j] = Character.toString(c);
                j++;
            }
            else if (c == '\n')
            {
                i++;
                j = 0;
            }
        }
        for (int i=0;i<5;i++)
        {
            for (int j=0;j<5;j++)
            {
                if (newline.equals(a[i][j]))
                {
                    mainArray[i][j] = null;
                }
            }
        }

配列を印刷する方法は次のとおりです。

        for (int i=0;i<5;i++)
        {
            for (int j=0;j<5;j++)
            {
                System.out.print(a[i][j]);
            }
           System.out.println("");
        }

私の望む出力は、

ABCnullnull

DEFnullnull

この問題に取り組むより良い方法はありますか??

4

3 に答える 3

1

BufferedReader には、\n または \r の前にあるすべての文字を含む文字列を返す readLine() メソッドがあります。また、ストリームの最後に null を返します。

FileInputStream fin;
fin = new FileInputStream("file.txt");
DataInputStream in = new DataInputStream (fin);
BufferedReader br = new BufferedReader (new InputStreamReader (in));
List<String> list = new ArrayList<String>();
String line;
while ((line= br.readLine())!=null)
{
  list.add(line);  
}

これは、任意の数の戻り値と任意の長さの文字列に対応します。

または、各行を配列として持つ必要がある場合

        FileInputStream fin;
        fin = new FileInputStream("file.txt");
        DataInputStream in = new DataInputStream(fin);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        List<char[]> list = new ArrayList<char[]>();
        String line;
        while ((line = br.readLine()) != null) {
            if(!line.isEmpty()) list.add(line.toCharArray());
        }

ファイルを読み取ると、リストのサイズが 2 になり、それぞれに 5 文字の配列が含まれます。['A',' ','B',' ','C'] 次に ['D',' ','E',' ','F']

于 2012-09-11T16:21:26.600 に答える
0

試す

public static String newline = System.getProperty("line.separator");
for (int i=0;i<5;i++)
{
    if (newline.equals(a[i]))
    {
        a[i] = null;
    }
}
于 2012-09-11T16:22:17.507 に答える
0

編集された回答:

あなたの回答を読んで、期待される出力が何であるかを見ると、次のようなことをした方が良いかもしれません...

pseudo-code
read entire line into String array index
Before printing, check length of String (a[i].length)
If length is less than 5, add 'null' to the end of the String for every character less than 5

Thus:
if(a[i].length < 5)
{
  int index = 5 - a[i].length;
  for( ; index > 0; index --)
  {
     a[i].concat("null");
  }
}

元の回答............私のコメントがあなたに送信されたかどうかはわかりません。インデックスを作成しすぎている可能性があります。

試す

for(int i = 0; i < 4; i++)
   System.print(a[i]);
于 2012-09-11T16:48:01.003 に答える