我目前正在使用 Java 中的 Vaadin 框架编写 Textchat。
现在我的问题:我想避免用户发送垃圾邮件或发布无用的文本,因此我有一些标准来过滤我的用户输入(以字符串形式给出) - 我怎样才能实现这一点?
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
最佳答案
我很难相信这真的值得优化;但是,我提供的建议是基于您已经进行了尽职调查并确定此代码代表您系统中的真正瓶颈,因此值得进行微优化。
如果您只想检查单词的长度(其中“单词”定义为由空格或换行符分隔的连续字符 block ),您可以简单地迭代字符:
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
对输入中的字符进行了一次遍历;不会创建不必要的对象。
关于Java-Chat-App::分析用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34792350/