它主要是关于在两个字符之间获取字符串值。因此有很多与此相关的问题。像:
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中的包名称因点数和字符数不同而不同,所以我不能使用固定索引。请提出任何想法。
答案 0 :(得分:2)
您所要做的就是将字符串拆分为“。”然后迭代它们直到找到一个等于“com”的东西。数组中的下一个字符串将是您想要的。
所以你的代码看起来像:
String[] parts = packageName.split("\\.");
int i = 0;
for(String part : parts) {
if(part.equals("com")
break;
}
++i;
}
String result = parts[i+1];
答案 1 :(得分:2)
您可以使用反射来获取任何类的名称。例如:
如果我在Runner
中有一个班级com.some.package
,我可以运行
Runner.class.toString() // string is "com.some.package.Runner"
获取恰好在其中包含包名的类的全名。
在' com'之后得到一些东西。您可以使用Runner.class.toString().split(".")
然后使用布尔标志
答案 2 :(得分:2)
您可能知道(基于正则表达式中的.*
部分)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);
}
输出:newline
如果您希望在下一个.
之前只获得一个元素,则需要通过添加{*
将.*
?
中的Pattern pattern = Pattern.compile("com[.](.*?)[.]");
// ^
量词更改为greedy behaviour {1}}之后
.*
另一种方法是[^.]*
仅接受非点字符。它们可以由reluctant代表: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);
的位置即可。然后你可以简单地对你想要的东西进行子串。
{{1}}
答案 3 :(得分:1)
private String getStringAfterComDot(String packageName) {
String strArr[] = packageName.split("\\.");
for(int i=0; i<strArr.length; i++){
if(strArr[i].equals("com"))
return strArr[i+1];
}
return "";
}
答案 4 :(得分:1)
在处理网站抓取和我之前,我已经完成了很多项目 只需创建自己的函数/ utils即可完成工作。正则表达式可能 如果你只想从中提取子字符串,那么有时候会有些过分 给定的字符串就像你拥有的字符串一样。以下是我通常的功能 用来做这种任务。
private String GetValueFromText(String sText, String sBefore, String sAfter)
{
String sRetValue = "";
int nPos = sText.indexOf(sBefore);
if ( nPos > -1 )
{
int nLast = sText.indexOf(sAfter,nPos+sBefore.length()+1);
if ( nLast > -1)
{
sRetValue = sText.substring(nPos+sBefore.length(),nLast);
}
}
return sRetValue;
}
要使用它,只需执行以下操作:
String sValue = GetValueFromText("au.com.newline.myact", ".com.", ".");