2

我在我的应用程序中使用外部数据库,我想从数据库中获取最大的报告代码(例如 13-T005)并将其递增 1。但是我正在努力获取最后 3 位,因为我使用了“int”它只得到最后一个数字。我怎样才能得到报告代码的最后 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);
}

数据库处理程序.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

根据评论中 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 的 Android 文档

于 2013-07-08T02:05:28.353 回答
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 回答