使用正则表达式在Android中进行路径分割

时间:2018-10-24 17:33:00

标签: java android regex

我在Splitting String using RegEx in Android处遵循了Ajb的推荐,并这样做:

@SuppressWarnings("JavaDoc")

public class DBUtility extends SQLiteOpenHelper {
    private static final String DB_NAME = "Angler.sqlite3";
    private static final int DB_VERSION = 1; //minimal 1, 0 nicht zulässig.

    private String DB_PATH_COMPLETE;
    private String DB_PATH;
    private String DB_PATH_DISPLAY;
    private SQLiteDatabase SQL_DB;
    private Context myContext;
    private String displayText;
    private BufferedReader Rdr;
    private char[] SQLstringAr;
    private String SQLstatementFile;
    private Cursor cur;

    /**
     * Constructor
     * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
     * @param context
     */
    public DBUtility(Context context) {
        // Kann nicht private werden
        super(context, DB_NAME, null, DB_VERSION); //3. Parameter Wert null ist die CursorFactory

        myContext = context;
        DB_PATH = myContext.getDatabasePath(DB_NAME).getPath();
        String RegEx = "((/data/data/(w+\\.w+/w+/w+/))w+\\.w+)"; // /data/data/wolfgang_jakobi.anglerapp/databases/Angler.sqlite3
        Pattern p = Pattern.compile(RegEx);
        Matcher m = p.matcher(DB_PATH);
        String [] Groups = new String[3];
        if (m.find()) {
            Groups[0] = m.group(1); // /data/data/wolfgang_jakobi.anglerapp/databases/Angler.sqlite3
            Groups[1] = m.group(2); // /data/data/wolfgang_jakobi.anglerapp/databases/
            Groups[2] = m.group(4); // wolfgang_jakobi.anglerapp/databases/
        }

        DB_PATH_COMPLETE = Groups[0];
        DB_PATH = Groups[1];
        DB_PATH_DISPLAY = Groups[2];

        SQL_DB = super.getReadableDatabase();
    }

可惜条件m.find()变为不正确,因此代码在条件括弧内并且我所有的组都为空之后继续执行,我不知道为什么。

谢谢您的推荐。

狼帮

2 个答案:

答案 0 :(得分:0)

我认为您的正则表达式有误。

"((/data/data/(w+\\.w+/w+/w+/))w+\\.w+)"

您似乎正在尝试使用字字符预定义字符类,但是,按照撰写的内容,您只是在寻找w个字符。也就是说,您需要在模式中使用\\w而不是w

"((/data/data/(\\w+\\.\\w+/\\w+/\\w+/))\\w+\\.\\w+)"

答案 1 :(得分:0)

我用C ++和ABAP开发了带有正则表达式的软件,可惜我在Android Studio(JAVA)中没有遵循相同的策略:已知的模式组必须将其沿纬线设置为正则表达式,然后可以替换为正则表达式逐渐每个组都使用通配符,在本问题中,我使用Ben建议的通配符“ \ w +”。

这样做,我发现我的分组是错误的,因为第三个“ w +”是多余的,但是我从未尝试过该错误是否有影响。

这是我的新代码,在其中留下了通配符替换的每一步作为注释:

SELECT "invitations".* FROM "invitations" WHERE "invitations"."sponsor_id" = $1 AND ("invitations"."referral_email" IN (SELECT DISTINCT "person"."email" FROM "person"))

此代码可以正常工作。

问候沃尔夫冈