Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查消息是否包含字符串_Java_String_Contains - Fatal编程技术网

Java 检查消息是否包含字符串

Java 检查消息是否包含字符串,java,string,contains,Java,String,Contains,我有一个类可以检查消息中包含的短语的id,我尝试使用匹配器和模式以及字符串.contains(),但返回的结果很奇怪 下面是课堂: public class MotsClesFilter implements EmailFilter { final String NAME = "Filtrage par mots cles"; /*private Pattern chaineSpam; private Matcher chaineCourriel;*/ priv

我有一个类可以检查消息中包含的短语的id,我尝试使用
匹配器
模式
以及
字符串.contains()
,但返回的结果很奇怪

下面是课堂:

public class MotsClesFilter implements EmailFilter {

    final String NAME = "Filtrage par mots cles";
    /*private Pattern chaineSpam;
    private Matcher chaineCourriel;*/
    private int nbOccMotSpam;
    private byte confidenceLevel;
    @Override
    public String getFilterName() {
        return this.NAME;

    }

    @Override
    public byte checkSpam(MimeMessage message) {
        analyze(message);

        if(this.nbOccMotSpam==0)
            this.confidenceLevel = 1;
        else if (this.nbOccMotSpam>0 && this.nbOccMotSpam<2)
            this.confidenceLevel = CANT_SAY;
        else if (this.nbOccMotSpam>1 && this.nbOccMotSpam<3)
            this.confidenceLevel = 50;
        else if (this.nbOccMotSpam>3 && this.nbOccMotSpam<4)
            this.confidenceLevel = 65;
        else if (this.nbOccMotSpam>4 && this.nbOccMotSpam<5)
            this.confidenceLevel = 85;
        else this.confidenceLevel = 90;
        return (getConfidenceLevel());
    }


    public void analyze(MimeMessage message){
        try {
            List<String> listeChaines = new ArrayList<String>(); 
            BufferedReader bis = new BufferedReader(new InputStreamReader(new FileInputStream(new File("SpamWords.txt"))));
            while(bis.ready()){
                String ligne = bis.readLine();
                listeChaines.add(ligne);
            }

            String mail = ((String.valueOf(message.getContent())));
            //System.out.println(mail);


            for (int j =0; j<listeChaines.size();j++){
                //System.out.println(listeChaines.get(j));
                Pattern chaineSpam = Pattern.compile(listeChaines.get(j),Pattern.CASE_INSENSITIVE);
                Matcher chaineCourriel = chaineSpam.matcher(mail);
                if (chaineCourriel.matches())
                    this.nbOccMotSpam++;

            }

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    @Override
    public byte getConfidenceLevel() {
        // TODO Auto-generated method stub
        return this.confidenceLevel;
    }

    @Override
    public boolean enabled() {
        // TODO Auto-generated method stub
        return true;
    }
}
公共类MotsClesFilter实现EmailFilter{
最后的字符串名称=“过滤过滤”;
/*私有模式链;
私人匹配器*/
私人int nbOccMotSpam;
私有字节信任度;
@凌驾
公共字符串getFilterName(){
返回此.NAME;
}
@凌驾
公用字节检查垃圾邮件(MimeMessage消息){
分析(信息);
if(this.nbOccMotSpam==0)
这个。自信水平=1;

否则,如果(this.nbOccMotSpam>0&&this.nbOccMotSpam1&&this.nbOccMotSpam3&&this.nbOccMotSpam4&&this.nbOccMotSpam,则表示消息与文件中的任何字符串都不匹配,但在消息中至少可以找到5个字符串


matches()
检查整个字符串是否与模式匹配。如果某些子字符串与模式匹配则不检查。

这两种方法都有效,您必须小心使用模式和匹配器,因为
字符串中可能有不兼容正则表达式的字符。
包含
是更好的选择。可能添加一些日志记录并使用调试器查看发生了什么另外,从
BufferedReader
读取的常用习惯用法是
if((line=reader.readLine())!=null
。我建议使用
switch
语句,而不是那些
if
语句。此外,有两个
if
语句永远不会为真。哪两个if
语句永远不会为真?我尝试了contains,但它的工作方式与find类似,并且没有给出正确的结果。如果数字是3或4,将执行else子句d、 我怀疑这是您想要的。整数不能同时大于3和小于4。是的,但find和String.contains检查wole pharase是否在消息中,是吗?
contains()
检查这一点。
find()
检查子字符串是否与regex模式匹配。有什么问题吗?输入(消息和列表链)是什么?你期望得到什么而不是得到什么?正如评论所指出的,你的if语句中有错误。这就是问题所在吗?对于ListChaines,这里是一个列表,它包含常见的垃圾邮件表达式,消息包含电子邮件的内容。这没有帮助。所有这些字符串的内容是什么。给定这些输入,你的输出是什么展望未来,你会得到什么样的结果。从你发布的信息来看,90可能是一个预期的结果。我已经解决了这个问题,我认为现在一切都好了,谢谢大家。