2

アプリで外部データベースを使用しており、データベースから最大のレポート コード (例: 13-T005)を取得し、それを 1 増やしたいと考えています。ただし、「int」を使用しているため、最後の 3 桁を取得する方法に苦労しています。最後の桁のみを取得します。問題なくレポート コードの最後の 3 桁を取得するにはどうすればよいですか。レポート コード全体を取得するにはどうすればよいですか? ありがとう。

私の MainActivity.java で:

    private void getNextReportCode() {
        tv_Code = (TextView) findViewById(R.id.tv_Code);
        String query = "SELECT SUBSTR(MAX(ReportCode),5) AS ReportCode FROM " + Constants.TABLE_REPORT; //getting the last 3 digits from the code
        Cursor cursorReportCode = databaseHandler.getLastRCode(query);
        int reportCode = cursorReportCode.getInt(cursorReportCode.getColumnIndex(Constants.REPORT_CODE)) +1; //increment by 1
        String newReportCode = "13-T" + reportCode; 
        tv_Code.setText(newReportCode);
}

DatabaseHandler.java

    public Cursor getLastRCode(String query) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.rawQuery(query, null);  
            if (cursor != null);
            cursor.moveToFirst();

        db.close();
        return cursor;
    } 
4

2 に答える 2

1

このコードサンプルは、あなたが望むことをするはずです。キーは、最後の 3 桁にあると述べたので、部分文字列を使用してレポート インデックスを抽出することです。次に、解析してインクリメントできます。レポート コードに戻すには、"%03d" を使用して 3 桁の長さのゼロで埋められた int を指定する文字列形式が必要です。

public class Report {

    public String incrementReportCode(String s) {
        // Get last 3 characters
        int length = s.length();
        String lastThreeChars = s.substring(length - 3, length);

        // Parse report index
        int reportIndex = Integer.parseInt(lastThreeChars);

        // Increment report index
        int incrementedReportIndex = reportIndex + 1;

        // Format as report code, with a zero-filled report index for the last 3 characters
        String reportCode = String.format("13-T%03d", incrementedReportIndex);
        return reportCode;
    }

}

これは私がこれのために作ったテストです:

public void testIncrement() {
    Report r = new Report();
    String incrementedString = r.incrementReportCode("13-T005");
    assertEquals("13-T006", incrementedString);
}
于 2013-07-08T02:10:27.707 に答える
1

コメントでの LuckyMe の提案によると、文字列を使用する可能性があります。

そこからのあなたの質問は次のHow do I increment the String?ようになりますHow do I increment the number at the end of the String?。(間違っていたら訂正しますか?)

ここで重要なのは、文字列が特定のパターンに従うことを知っていることです。具体的には、[number1]-T[number2]に興味がありますnumber2

ここで必要になる可能性が高いツールは、正規表現です。幸いなことに、Java には API とチュートリアルが用意されています。要点は、文字列が従うパターンを提示し、正規表現 (別名 Regex) を使用してその特定の部分をキャプチャできるようにすることです。

それがあなたを正しい軌道に乗せることを願っています!

編集: 具体的には、これはregex に関する Android ドキュメントです。

于 2013-07-08T02:05:28.353 に答える