2016-09-26 2 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 쪽이 더 좋을 것입니다.

관련 문제