Java String-如何在android中获取包名称的一部分?

标签 java android string

它基本上是关于获取两个字符之间的字符串值。 SO 有很多与此相关的问题。喜欢:

How to get a part of a string in java?

How to get a string between two characters?

Extract string between two strings in java

等等。 但在处理字符串中的多个点并获取某些两个点之间的值时,我觉得很困惑。

我得到的包名称为:

au.com.newline.myact

我需要获取“com.”之间的值。和下一个“点(.)”。在本例中为“换行符”。我试过了

Pattern pattern = Pattern.compile("com.(.*).");
Matcher matcher = pattern.matcher(beforeTask);
while (matcher.find()) {
        int ct = matcher.group();

我也尝试使用子字符串和 IndexOf 。但无法得到想要的答案。由于android中的包名称因点和字符的数量不同而异,因此我无法使用固定索引。请提出任何想法。

最佳答案

正如您可能知道的那样(基于正则表达式中的 .* 部分)dot . 是正则表达式中的特殊字符,表示任何字符(行分隔符除外)。因此,要真正使点仅代表点,您需要转义它。为此,您可以将 \ 放在其前面,或将其放在 character class 内。 [.]

另外,要仅从括号 (.*) 中获取部分,您需要使用正确的 group 选择它索引,在您的情况下为 1

所以尝试一下

String beforeTask = "au.com.newline.myact";
Pattern pattern = Pattern.compile("com[.](.*)[.]");
Matcher matcher = pattern.matcher(beforeTask);
while (matcher.find()) {
     String ct = matcher.group(1);//remember that regex finds Strings, not int
     System.out.println(ct);
}

输出:换行

<小时/>

如果您只想在下一个 . 之前获取一个元素,那么您需要更改 greedy behaviour .* 中的 * 量词到 reluctant在其后面添加 ? ,例如

Pattern pattern = Pattern.compile("com[.](.*?)[.]");
//                                          ^

另一种方法是不接受仅接受非点字符的 .*。它们可以用 negated character class 表示: [^.]*

Pattern pattern = Pattern.compile("com[.]([^.]*)[.]");
<小时/>

如果您不想使用正则表达式,您可以简单地使用 indexOf 方法来定位 com. 及其后的下一个 . 的位置。然后你可以简单地对你想要的内容进行子串。

String beforeTask = "au.com.newline.myact.modelact";
int start = beforeTask.indexOf("com.") + 4; // +4 since we also want to skip 'com.' part
int end = beforeTask.indexOf(".", start); //find next `.` after start index 
String resutl = beforeTask.substring(start, end);
System.out.println(resutl);

关于Java String-如何在android中获取包名称的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29639206/

相关文章:

java - 在同一屏幕中将 JDialog 与其 JFrame 父级显示在所需位置

java - 我想使用用户输入的字符串 ex 的前 3 个字母。 "january"结果 :"jan"

javascript - 附加查询字符串 - PHP

regex - 在 MATLAB 中将元胞元胞数组转换为字符串元胞数组

Java:四舍五入到任意值

java - 如何在 JAVA 代码中获取随机元素?

通过 Selenium 执行测试时,java.lang.ClassCastException : java. base/java.lang.String 无法转换为 org.openqa.selenium.WebElement

android - 销毁从 BroadcastReceiver 开始的 Activity

Android 应用程序在实现数字选择器对话框后停止工作

android - Illegalstateexception fragment 必须是公共(public)静态类才能从实例状态正确地重新创建