2016-09-26 100 views
0

我想匿名字符串(來自用戶的任意輸入),但仍保留其結構。因此,我想用隨機小寫字母,隨機數字和大寫字母和隨機大寫字母替換小寫字母。用字符串中的隨機字符替換字母和數字

我已經想出了這個功能,但我想知道這是最快/最好的方式嗎?

public String anonymiseString(String originalInput){ 
    StringBuilder input = new StringBuilder(originalInput); 
    Random r = new Random(); 
    char currentChar; 
    for(int i = 0; i < input.length(); i++) { 
     currentChar = input.charAt(i); 
     if(Character.isUpperCase(currentChar)) 
      input.setCharAt(i, (char) (r.nextInt(26) + 'A')); 
     else if (Character.isLowerCase(currentChar)) 
      input.setCharAt(i, (char) (r.nextInt(26) + 'a')); 
     else if (Character.isDigit(currentChar)) 
      input.setCharAt(i, (char) (r.nextInt(10) + '0')); 
    } 

    return input.toString(); 
} 

的例子可以在這裏運行:https://ideone.com/VNebO0

+4

儘管這個問題可以吸引很好的答案,但由於您正在提交您希望改進的工作代碼,所以最好在[CodeReview stackexchange](http://codereview.stackexchange.com/)上收到。 – Aaron

+0

你知道爲什麼你從未在結果字符串中得到九個結果嗎? – dasblinkenlight

+0

我投票結束這個問題作爲題外話,因爲代碼主要是工作,除了一個微不足道的問題的核心。工作代碼應該發佈到codereview站點。 – dasblinkenlight

回答

-1

基本上你的解決方案是好的,但也有一些方法可以使代碼更乾淨:

  • 喬遷焦炭代成3種獨立的方法(例如,char createNewUpperCase(),char createNewDigit()char createNewLetter()
  • 也將所有if邏輯提取到單獨的方法中(例如char createNewChar(char currentChar)

這樣你的代碼會更好從Single Responsibility Principle一面。