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