在我的SQLite数据库中,我有一个由电子邮件和教程名称(它是一个电子学习应用程序)组成的组合键,比如sonop@us.ac.zaTutorial 1或 3。当我稍后使用它们的时候,我很难把它们分开。我想分别获得教程(教程1)和电子邮件。看起来很直截了当但我还在挣扎?
以下是我迄今所做的尝试:
String Key = cursor.getString(cursor.getColumnIndex("key"));
String email = Key.replace("^(.*)(Tutorial)(\\s)(\\d+)$", "$1");
String Tutorial = Key.replace("^(.*)(Tutorial)(\\s)(\\d+)$", "$2$3$4");但是,当我稍后使用print语句时,没有任何东西被替换或更改。有什么想法吗?还是有更简单的方法来做到这一点?
发布于 2014-09-17 07:54:29
如果您想使用regex,那么像这样的东西应该可以工作:
String pattern = "(.+)(Tutorial\\s\\d+)";
Pattern r = Pattern.compile(pattern);
String[] s = { "sonop@us.ac.zaTutorial 1",
"randomperson@gmail.comTutorial 3" };
for (String str : s) {
Matcher m = r.matcher(str);
if (m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
}
}发布于 2014-09-17 07:53:23
如果要使用regexp,则需要使用replaceAll (而不是replace)。但在这种情况下,我建议您简单地这样做:
int i = input.lastIndexOf("Tutorial");
String email = input.substring(0, i);
String tutorial = input.substring(i);如果您真的想使用regexps,我会推荐如下
String key = "^(.*)(Tutorial \\d+)$";
String email = input.replaceAll(key, "$1");
String tutorial = input.replaceAll(key, "$2");发布于 2014-09-17 08:00:08
我想你想要这样的东西,
System.out.println("sonop@us.ac.zaTutorial 1".replaceAll("^(.*?@[^A-Z]+)([A-Z]\\S+\\s*\\d+)$", "$1 $2"));
System.out.println("sonop@us.ac.zaTutorial 1".replaceAll("^(.*?@[^A-Z]+)([A-Z]\\S+\\s*\\d+)$", "$1"));
System.out.println("sonop@us.ac.zaTutorial 1".replaceAll("^(.*?@[^A-Z]+)([A-Z]\\S+\\s*\\d+)$", "$2"));输出:
sonop@us.ac.za Tutorial 1
sonop@us.ac.za
Tutorial 1演示
第一组包含电子邮件id,第二组包含字符串Tutorial和以下编号。
https://stackoverflow.com/questions/25885095
复制相似问题