2016-01-14 29 views
1

我目前正在用Java中的Vaadin-Framework编写Textchat。Java-Chat-App ::分析用户输入

现在我的问题:我想避免垃圾邮件的用户或张贴无用的文字,所以我有一些标准来筛选我userinput(给出一个字符串) - 我怎样才能做到这一点?

1)检查单词比定义WORD_CAP 2)检查的整体INPUT_CAP 3)检查当没有输入 4)检查对特定词语(swaerwords,也许特定的词长,所以我可以生成对某些单词的另一个可视化)

目标: 如何在服务器(蜻蜓8)的时间和工作方面最有效地完成此任务以及我应该考虑什么。任何有经验的人?

另外这里是我的ClickListener,该用户点击发送消息/输入

String input = chatInputBox.getValue(); 

       if (input.length() <= MAX_CHAT_ZEICHEN_INPUT) { 
        if (!(input.length() == 0)) { 
         if(analyseTooLongWords(input)) { 

//More Code here 
       } 
      } 
} 

方法分析字的代码:

private boolean analyseTooLongWords(String input) { 

    String[] rows = input.split("\\n"); 
    for(int i = 0; i < rows.length; i++) { 
     String[] words = rows[i].split(" "); 

     for (int j = 0; j < words.length; j++) { 
      if (words[j].length() > MAX_WORD_LENGTH) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

感谢所有答案提前 问候DJ

+1

“最高效”在什么方面?空间?时间?可读性? ... –

+0

通过使用String.indexOf来查找下一个换行符或空格,可以避免在'analyseTooLongWords'中创建不必要的对象;你自己实际上并不需要字符串,前面的分隔符和当前分隔符之间有多少个字符。 –

+0

在我的服务器的时间和工作方面,我不想在这项任务中使用过多的性能。 –

回答

0

我觉得很难相信这真的值得优化;然而,我提供了一个建议,基于您已经做了尽职调查并确定此代码是您系统中的真正瓶颈,因此值得进行微观优化。

如果只是要检查字的长度(其中,“字”被定义为通过空间或换行符分隔字符的连续块),可以简单地通过字符迭代:

int i = 0; 
while (i < input.length()) { 
    while (i < input.length() && (input.charAt(i) == ' ' || input.charAt(i) == '\n')) { 
    ++i; 
    } 
    int start = i; 
    while (i < input.length() && (input.charAt(i) != ' ' && input.charAt(i) != '\n')) { 
    ++i; 
    } 
    int wordLength = i - start; 
    if (wordLength > MAX_WORD_LENGTH) { 
    return false; 
    } 
} 
return true; 

这是O(n),因为i使输入中的字符单次传递;没有不必要的对象被创建。