1

以下に示すように、タブ区切りのテキストファイル abc .txt を読んでいます

gfh  hgh  thf
---  ---  ---
fgh  sji  irj   
rhf  dhh  fhf
kji  idj  ddt

私はそれを正常に読み取ることができます (テーブル内のすべての列に対して、ゲッターとセッターと共に別の pojo を開発しました)。利点は、ゲッターを介して完全な行の値を取得できることです。

ここで、テーブル内のどの列も null にならないようにする必要があり、いずれかの列の値が null の場合は、新しい例外をスローする必要があります。たとえば、..

gfh  hgh  thf
---  ---  ---
fgh  sji  irj   //row 1
rhf  dhh  fhf
kji  idj  ddt
fgq       fio   //As seen in this row that second column value is null 

今私が従っているアプローチは、以下に示すように、文字列で行ごとに値を取得することです

String n = f.getgfh()+f.gethgh()+f.getthf();  //it will contain the contents of the row 1

別のメソッドを作成し、この文字列を渡します

private boolean validaterow(String f)
{
}

ここのこのメソッドでは、文字列内の完全な行を取得しています。このメソッド内では、この文字列をトークンに分割し、それらのトークンを空または null でさらに評価します。存在する場合は false を返します

4

7 に答える 7

1

これを試して、

private boolean validateRow(String f)
{
if(f.getgfh() != null && !f.getgfh().trim().isEmpty() &&
 f.gethgh() != null && !f.gethgh().trim().isEmpty() &&
            f.getthf() != null && !f.getthf().trim().isEmpty())
    {
        return true;
    }
    else
    {
        return false;
    }
}
于 2013-05-02T09:37:54.317 に答える
0

getNextValueAndPosPair()tsv (タブ区切り値) ファイルの次の値と、読み取った値の後に見つかった最後のスペースの位置を返すメソッドがあるとします (例: TabまたはNewline )。

次に、 Tabで区切られた正確に 3 つの異なる値が含まれていることを確認して、入力行を検証できます。

実装の下:

// A simple general pair class.
class Pair<A, B> {

    Pair(A first, A second) {
        this.first = first;
        this.second = second;        
    }

    public A first() { return first; }


    public A second() { return second; }


    private final A first;

    private final B second;
}

// Returns true if this rows contains 4 distinct values, false otherwise.
private boolean validaterow(String f) {
    int pos = 0;
    for (int i = 0; i < 3; i++) {
        Pair<String, Integer> valueAndPos = getNextValueAndPosPair(f, pos);
        String value = valueAndPos.first();
        int pos = valueAndPos.second();
        if (value.isEmpty()) {
            System.err.println("The " + i + "-th value is null.");
            return false;
        }
        pos += 1;
    }
    return true;
}

// Returns a Pair holding the next tsv value in the row and the position of the delimiter space
private Pair<String, Integer> getNextValueAndPosPair(String f, int start) {
    int length = 0;
    for (int i = start; i < f.length && !Character.isSpaceChar(f.charAt(i)); i++) length++;

    int end = start + length;
    String value = f.substring(start, end);
    Pair<String, Integer> valueAndPos = new Pair<>(value, end);
    return valueAndPos;
}
于 2013-05-02T09:34:15.200 に答える
0

ゲッターのようにnullチェックを設定できます

public String gethgh() {

  return (String) ((null == hgh) ? new UserDefinedException() : hgh); 

}

ここで UserDefinedException をクラスとして宣言する必要があります

これはうまくいくはずだと思います

于 2013-05-02T08:23:46.367 に答える
0

なぜメソッドに渡すのですか?

使用する

String row1,row2,row3;
row1=f.getgfh();
row2=f.gethgh();
row3=f.getthf();

連結時の状態を確認できます。

if(row1==null)
 'throw your message
else
 row1=""
if(row2==null)
 'throw your message
else
 row2=""
if(row3==null)
 'throw your message
else
 row3=""

やっと、

String n = row1+row2+row3;
于 2013-05-02T09:30:17.867 に答える
0

apache string utils ライブラリを見てください。必要なものがあるかもしれません

于 2013-05-02T09:38:59.000 に答える