2012-05-03 52 views
0

我有一个很长的字符串,我想解析并检索一个值。 我正在考虑使用模式,但在这方面我有点生疏。android,从长字符串提取值

这是我感兴趣的字符串的一部分:

...下沉将是44%的成功...

字 '下沉' 是关键字。我期望得到的百分比值(在这种情况下为44%)

什么是最好的方式? 谢谢。

**“将会”的字词可能会改变。

+0

只有两个选项,stringtokenize/split(或)表达式。你需要选择其中之一。 – kosa

回答

2

这里是一个正则表达式的解决方案:

String str = "...sinking will be 44% successful..."; 
Pattern p = Pattern.compile("sinking will be (\\S*) successful"); 
Matcher m = p.matcher(str); 
if (m.find()) { 
    String percent = m.group(1); 
} 

如果你只想百分比数字值,你的模式改成这样:

"sinking will be (\\d*)% successful" 

如果前述任文是无关紧要的,你只是要抢%的行使用这种模式:

"(\\d*%)" 

编辑:如果您的关键字是“下沉”,并希望这个词后的第一个百分比值,这将是你的模式:

"sinking(?:[\\w\\s]*) (\\d+%)" 
+0

,谢谢杰森,但是在这篇文章前后有一些其他的百分比,所以我不认为这会起作用 – Ray

+0

你知道吗?有多少?如果没有,那么这个百分比究竟是什么意思呢?你会如何选择这个比例? –

+0

重读你的问题,看看我的编辑。 –

2
如果总是这样的字符串

简单的解决方案:

String splitMe = "...sinking will be 44% successful..."; 
String strPercents = splitMe.split(" ")[3]; 
System.out.println(strPercents);//test output 

否则:良好的正则表达式的ressource http://www.vogella.com/articles/JavaRegularExpressions/article.html#examples

+0

谢谢托马斯。但我认为这不会起作用(是吧?),因为这只是我感兴趣的部分。在此之前和之后有很多其他的东西,因此... – Ray

1

只要你知道文本将始终以“下沉会”开始, a%将永远在那里这将工作,无论周围的文字

String s = "more text more text sinking will be 44% successful more text"; 
String find = "sinking will be "; 
int findIndex = s.indexOf(find) + find.length(); 
int pctIndex = s.indexOf("%", findIndex); 

String result = s.substring(findIndex , pctIndex); 
+0

不幸的是只有“沉没”这个词是肯定会在那里。 – Ray

+0

我刚刚注意到你编辑你的帖子,文本“将”可能并不总是在这种情况下,这是行不通的,你最好的选择是使用正则表达式 – dymmeh