2014-09-11 3 views
1

나는 monalphabetic 대체 알고리즘을 구현 중입니다. 키와 값은 HashMap의에 저장되어 StringBuffer와 클래스 형식의 변수를 사용하여 입력 문자열의 매개 변수로 : 그래서 source.setCharAt(i, entry.getValue().toString());문자열 기호를 char로 변환

:

public class Mono { 
    private StringBuffer source; 
    private Map<String, String> alphabet; 

public Mono(String source) { 
    this.source = new StringBuffer(source); 
    alphabet = new HashMap<>(); 
    alphabet.put("a", "f"); 
    alphabet.put(//... etc. 
} 

public StringBuffer startEncrypt() { 
     for (int i = 0; i < source.length(); i++) { 
      for (Map.Entry entry : alphabet.entrySet()) { 
       if (entry.getKey().toString().equals(source.charAt(i))) { 
        source.setCharAt(i, entry.getValue().toString()); 
       } 
      } 
     } 

     return source; 
    } 
} 

내가 여기 숯불에 문자열을 변환하는 문제가 발생을 , 내 질문은 그것을하는 방법입니다? 아니면 문자를 대체하는 또 다른 방법이 있습니까?

감사합니다.

답변

3

문자열의 첫 번째 문자를 가져 오는 데는 charAt(0)을 사용할 수 있습니다. 이미 키에 대해 수행하고있는 것처럼 말입니다. 당신은 원시 타입 대신 매개 변수 Map.Entry를 사용하는 경우, 당신은 toString 전화를 필요로하지 않습니다 중 하나 말했다

for (Map.Entry<String, String> entry : alphabet.entrySet()) { 
    // TODO: Should this be source.charAt(i)? 
    if (entry.getKey().equals(source.charAt(0))) { 
     source.setCharAt(i, entry.getValue().charAt(0)); 
    } 
} 

모든 문자열은하지 않는 이유는 정말 그냥 하나의 문자, 경우 Map<Character, Character>을 사용 하시겠습니까? 또한 을 모두 반복 항목이 비효율적이며 거의 확실하게 이 아니며 원하는대로 수행 할 수 있습니다. 난 당신이 실제로이 원하는 의심 뭔가 같은 :

private final Map<Character, Character> mappings; 

public String substitute(String input) { 
    char[] chars = input.toCharArray(); 
    for (int i = 0; < chars.length; i++) { 
     Character sub = mapping.get(chars[i]); 
     if (sub != null) { 
      chars[i] = sub; 
     } 
    } 
    return new String(chars); 
} 
+0

'이게 source.charAt (i)일까요? '예, 당신은 맞습니다. 나는 Collections Framework에 대해 아직 완전히 알지 못했기 때문에 도움을 주셔서 대단히 감사합니다! –

1

시도 : 그것은 더 읽기의

public class Mono { 
    private StringBuffer source; 
    private Map<Character, Character> alphabet; 

    public Mono(String source) { 
     this.source = new StringBuffer(source); 
     alphabet = new HashMap<>(); 
     alphabet.put('a', 'f'); 
     alphabet.put(//... etc. 
    } 

    public StringBuffer startEncrypt() { 
     for (int i = 0; i < source.length(); i++) { 
      for (Character key : alphabet.keySet()) { 
       if (source.charAt(0) == key) { 
        source.setCharAt(i, alphabet.get(key)); 
       } 
      } 
     } 

     return source; 
    } 
} 

과 : 귀하의 요구하지만 같이 갈 것 맞게

entry.getValue().toString().chartAt(0) 
0

확실하지 의지 당신은 어떤 타입 변환도 필요가 없습니다. 더 간단한 것이 더 낫다.