android开发中常用的正则表达式,【记录】Android中的正则表达式的使用

之前已经知道,Android中的开发,写app的代码,就是写Java代码:

也折腾过简单的Java的正则表达式了:

现在需要,在Android的app中,通过代码,使用正则,去提取所需内容。下面记录过程:

1.网上找到:

结果此刻半天没打开。。。

2.参考:

直接去写代码算了:import java.util.regex.Matcher;

import java.util.regex.Pattern;

//

我的爱与你分享

Pattern titleP = Pattern.compile("

(?

.+?)");

Matcher matchedTitle = titleP.matcher(respHtml);

Boolean foundTitle = matchedTitle.matches();

if(foundTitle){

String title = matchedTitle.group(1);

}

结果始终出错,最后才发现,原来是由于,此处Android中,不知道是哪个版本的Java,但肯定是Java 1.7之前的,所以带了命名的组,结果就出错了。

详细解释,见之前的折腾:

3.去掉带命名的组,才可以://

我的爱与你分享

Pattern titleP = Pattern.compile("

(.+?)

");

Matcher matchedTitle = titleP.matcher(respHtml);

Boolean foundTitle = matchedTitle.matches();

if(foundTitle){

String title = matchedTitle.group(1);

}

else

{

Toast.makeText(getApplicationContext(), "找不到Songtaste歌曲的标题!", Toast.LENGTH_SHORT).show();

}

然后就可以正常执行代码了。

但是此处遇到一个问题,那就是,用这部分的代码:HttpGet request = new HttpGet(strSongUrl);

HttpClient httpClient = new DefaultHttpClient();

try {

HttpResponse response = httpClient.execute(request);

if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){

String respHtml = EntityUtils.toString(response.getEntity());

//etUrlOrId.setText(respHtml);

//

我的爱与你分享

Pattern titleP = Pattern.compile("

(.+?)

");

Matcher matchedTitle = titleP.matcher(respHtml);

Boolean foundTitle = matchedTitle.matches();

if(foundTitle){

String title = matchedTitle.group(1);

}

else

{

Toast.makeText(getApplicationContext(), "找不到Songtaste歌曲的标题!", Toast.LENGTH_SHORT).show();

}

//System.out.println(response);

}

} catch (ClientProtocolException cpe) {

// TODO Auto-generated catch block

cpe.printStackTrace();

} catch (IOException ioe) {

// TODO Auto-generated catch block

ioe.printStackTrace();

}

去获得的respHtml,只有正常网页的html的一部分,即看似被截断了,或者有大小限制。

具体折腾过程参见:

接下来,就是要去解决返回的html是乱码,需要针对此处的GB2312的字符,解码为对应的Unicode字符。

【总结】

Android中的正则,还是和之前遇到的,Java中的一样,导入:

import java.util.regex.Matcher;

import java.util.regex.Pattern;

后,就可以去使用了。

还是需要注意,如果想要提取内容,注意不要把find错用成matches了,否则由于match会是从字符串开始就去匹配,所以你只写了相应部分的字符串的正则,肯定是无法match的,所以肯定是找不到的。

正确写法是类似于下面的:import java.util.regex.Matcher;

import java.util.regex.Pattern;

Pattern titleP = Pattern.compile("

(.+?)

"); #此处Android中的java,不支持命名的组

Matcher matchedTitle = titleP.matcher(respHtml);

//Boolean foundTitle = matchedTitle.matches(); //不要误写成了matches

Boolean foundTitle = matchedTitle.find();

if(foundTitle){

String title = matchedTitle.group(1);

}

还是那句话,Java中的正则,不是一般的烂啊。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值