Java-Chat-App ::分析UserInput

时间:2016-01-14 14:43:27

标签: java string vaadin

我目前使用Java中的Vaadin-Framework编写文本聊天。

现在我的问题:我想避免用户发送垃圾邮件或发布无用的文本,所以我有一些标准过滤我的用户输入(以字符串形式给出) - 我该如何实现这一目标?

1)检查长于定义WORD_CAP的单个单词 2)检查整体INPUT_CAP 3)检查何时没有输入 4)检查某些单词(swaerwords,也许是特定单词,这样我就可以为某些单词生成另一个可视化)

目标: 如何在服务器(Wildfly 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 :(得分:0)

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

如果您只是想检查单词的长度(其中&#34;单词&#34;被定义为由空格或换行符分隔的连续字符块),您可以简单地遍历字符:

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只传递输入中的字符;没有创建不必要的对象。