2016-01-14 64 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使輸入中的字符單次傳遞;沒有不必要的對象被創建。