当前位置:编程学习 > wap >>

android读中文短信实现垃圾短信过滤问题

楼主是这样做的,先获取短信内容,保存在test short message.txt下
public void onReceive(Context context, Intent intent) {
////将进来的短信保存在文件中  
//System.out.println(TelephoneDemo.start);
int block=0;
if(TelephoneDemo.start==true)
{
//Intent intent1=getIntent();
String name =new String("");
 
if (intent != null && intent.getAction() != null
&& ACTION.compareToIgnoreCase(intent.getAction()) == 0) {
/*获取短信*/ Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
StringBuilder sb = new StringBuilder();

SmsMessage[] messages = new SmsMessage[pduArray.length];
/*打印输出函数(系统后台接受)*/for (int i = 0; i < pduArray.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]);
// 打印消息
String mess=messages[i].getDisplayMessageBody();


name=name.concat(mess);
//获取短信号码
for (SmsMessage currentMessage : messages)
{
sb.append("短信来源:");
// 获得接收短信的电话号码
sb.append(currentMessage.getDisplayOriginatingAddress());
sb.append("\n------短信内容------\n");
// 获得短信的内容
sb.append(currentMessage.getDisplayMessageBody());
sb.append("\n");
}
}

String mess="\r\n";
String SDPATH;  
String FILESPATH; 
SDPATH = Environment.getExternalStorageDirectory().getPath() + "//";
// FILESPATH = this.context.getFilesDir().getPath() + "//"; 
String fileName="test short message.txt";



FILESPATH=SDPATH+"/"+fileName;
name=name.concat(mess);

writeFileSdcard(FILESPATH,name);//保存短信内容,以便做判断
下面继续读sdcard中dic2.txt(垃圾字典中的词),然后看短信中有无出现垃圾的词,如有将block变量改为1

int length=0;
  int minlength=1000,minnumebr = 0;
  float averagelength;
fileName="test short message.txt";
FILESPATH=SDPATH+"/"+fileName;
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(FILESPATH))); 
fileName="vertics";
FILESPATH=SDPATH+"/"+fileName;
DataOutputStream fr2 = new DataOutputStream(new FileOutputStream(FILESPATH));
fileName="dic2.txt";
FILESPATH=SDPATH+"/"+fileName;
BufferedReader br3 = new BufferedReader(new InputStreamReader(new FileInputStream(FILESPATH))); 
    
   

 int number=0;
  int begin=0;
   
   int sum=327;//词总个数
   int total=sum+3;//默认维
   int duanmax=1000;
 double [][]result=new double[duanmax][total+1];
  String []biaodian={"1","2","3","4","5","6","7","8","9","0"," ","?",":","《","》","*","~","%","`","【","】","了","的","-","#","'"};
 String []s=new String[sum];
String duanxin=null;
 for(int j=0;j<duanmax;j++)
 for(int i=0;i<total;i++)
 {
 result[j][i]=0;
 }
 s[number]=br3.readLine();//将字典读入内存
 for(int number1=1;number1<sum;number1++)

s[number1]=br3.readLine(); }
 
 



 
 
 int duanxincount=0;
 duanxin=br.readLine(); 

 while( duanxin!=null)
 {
 if(duanxin.length()<=35)
 result[duanxincount][total-1]=1.0;
 
 result[duanxincount][total-2]=0.3;
 length+=duanxin.length();
for(int j=0;j<biaodian.length;j++)
{

duanxin=duanxin.replace(biaodian[j], "");
}
System.out.println(duanxin);
for(int n=0;n<duanxin.length();n++)
{int at=0;
begin=n;
int l=0;

 int count=0;

//System.out.println("l:"+l+"n: "+ n);
 while(l<sum&&begin<duanxin.length()&&duanxin.charAt(begin)!=s[l].charAt(at))
 { l++;
 
 }

 
while(begin<duanxin.length()&&l<sum&&at<s[l].length()&&duanxin.charAt(begin)==s[l].charAt(at))




//System.out.println(duanxin.charAt(begin));

// System.out.println(duanxin.charAt(begin));
at++;
begin++;
count++;

//System.out.println(at);




//System.out.println(l);
if(begin<duanxin.length()&&l<sum-1&&at<s[l].length()&&duanxin.charAt(begin)!=s[l].charAt(at)&&duanxin.charAt(begin-count)==s[l+1].charAt(at-count))
{
//System.out.println("enter");
l++;
at-=count;
begin-=count;
// System.out.println(begin);
//System.out.println(duanxin.charAt(begin));
count=0;
// System.out.println(at);
//System.out.println(begin);
}


}

if(l<sum&&at==s[l].length())
{
result[duanxincount][l]=1;
//System.out.println(s[l]);
n=n+s[1].length()-1;
block=1;

}

}
result[duanxincount][total-1]=0.3;
duanxin=br.readLine();
duanxincount++;
 }

上面是部分代码,在java上运行正常,词都能分出来,但转到android上只能分出来“www”,“http”等英文,中文词都
找不到,哪位高手帮忙看看,网上讲是对中文编码的问题,小弟不懂,还望各位大虾指教!!!
在此跪谢!!!
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,