2016-09-26 104 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一面。