2016-09-26 17 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

なぜあなたはあなたの結果の文字列に9を得ることがないのか分かりましたか? – dasblinkenlight

+0

質問の中心ではない小さな間違いを除けば、コードは主に機能しているので、私はこのトピックをオフトピックとして閉じるよう投票しています。作業コードはcodereviewサイトに投稿する必要があります。 – dasblinkenlight

答えて

-1

あなたのソリューションは良いのですが、コードをよりきれいにするいくつかの方法がありました:

  • 移動新しいchar型の世代は、3つの別々のメソッドに(例えば、char createNewUpperCase(),char createNewDigit()およびchar createNewLetter()
  • すべてをif論理を別の方法にも抽出する(例えばchar createNewChar(char currentChar)

あなたのコードはSingle Responsibility Principleの方が良いでしょう。

関連する問題