2012-07-17 2 views
0

기본적으로 문자열을 가져 와서 알파벳의 각 문자를 바꾸지 만 공백은 그대로두고 "null"로 변환하지 않습니다. 문자열,이 질문을 여는 주된 이유입니다.StringBuffer 추가 공백 ("") 대신 "null"을 추가합니다.

"ALPHA BETA"대신 "ALPHAnullBETA"가 표시되는 대신 아래 함수를 사용하여 "a b"문자열을 전달하십시오.

현재 반복되는 개별 문자가 공백인지 확인하는 방법을 시도했지만 아무 것도 작동하지 않는 것 같습니다. 이러한 모든 시나리오는 일반 문자처럼 거짓을 표시합니다. 문자열이 동일한 경우

public String charConvert(String s) { 

    Map<String, String> t = new HashMap<String, String>(); // Associative array 
    t.put("a", "ALPHA"); 
    t.put("b", "BETA"); 
    t.put("c", "GAMA"); 
    // So on... 

    StringBuffer sb = new StringBuffer(0); 
    s = s.toLowerCase(); // This is my full string 

    for (int i = 0; i < s.length(); i++) { 
     char c = s.charAt(i); 

     String st = String.valueOf(c); 
     if (st.compareTo(" ") == 1) { 
      // This is the problematic condition 
      // The script should just append a space in this case, but nothing seems to invoke this scenario 
     } else { 
      sb.append(st); 
     } 

    } 

    s = sb.toString(); 

    return s; 
} 
+1

compareTo는 객체가 동일한 경우 0을 반환합니다. –

+0

Character.isWhitespace (c)를 사용할 수 있습니다. –

+0

StringBuilder를 사용할 수있는 경우 StringBuffer를 사용하지 마십시오. –

답변

5

compareTo()은 문자열이 동일하면 0을 반환합니다. 첫 번째 문자열의 양수는 두 번째 문자열보다 큼.

하지만 실제로 문자열을 비교할 필요는 없습니다. 당신이 대신 같은 것을 할 수 있습니다

char c = s.charAt(i); 

if(c == ' ') { 
    // do something 
} else { 
    sb.append(c); 
} 

또는 사용 사례에 대한 더 나은 :

String st = s.substring(i,i+1); 
if(t.contains(st)) { 
    sb.append(t.get(st)); 
} else { 
    sb.append(st); 
} 

도 청소기 코드를 얻으려면, 당신의지도 Character에서 String 대신 <String,String>에해야한다.

2

String.compareTo() 반환 0이 아닌 1 읽기이 경우 당신은 문자열로 문자를 변환 할 필요가 없다는 것이 here

주에 대해, 당신은

을 할 수
if(c == ' ') 
0

먼저이 예제에서 s은 무엇입니까? 코드를 따라 가기가 어렵습니다. 그런 다음, compareTo와 떨어져 보인다 : 0 "동일"을 의미하기 때문에

if (st.compareTo(" ") == 1) 

if (st.compareTo(" ") == 0) 

이어야한다 (은 compareTo에 read up)에 compareTo와 문서에서

0

: 당신은이 The result is a negative integer if this String object lexicographically precedes the argument string. The result is a positive integer if this String object lexicographically follows the argument string. The result is zero if the strings are equal;

잘못된 조건으로 if (st.compareTo(" ") == 1) {

0

문자열의 compareTo 메소드는 소스 문자열이 테스트 문자열보다 먼저 나오면 -1을 반환하고 같음을 알리기 위해 0을, 소스 문자열이 뒤에 오는 경우에는 1을 반환합니다. 코드는 하나를 확인하고, 문제를 해결 0

1

사용

Character.isWhitespace(c) 

확인해야합니다. 모범 사례.