2014-04-09 4 views
0

그래서 오늘 오후에 Java를 배우기 시작했습니다. 이 일을하는 가장 좋은 방법은 무엇입니까? 그리고 내가 뭘 잘못 했니? 순간, 난 그냥 아무 출력 :(자바다른 모든 문자를 대문자로 변환합니다. 즉, abcd -> aBcD

import java.util.Scanner; 

class ClassA { 
    public static void main(String[] args) { 
     Scanner MyScan = new Scanner(System.in); 
     System.out.print("Enter Word: "); 
     String UI = MyScan.nextLine(); 
     UI.toLowerCase(); 
     String s; 
     String word = ""; 
     for (int i = 0; i <= UI.length()-1; i++) { 
      s = UI.substring(i, i+1); 
      if (i % 2 == 1) { 
       s.toUpperCase();  
      } 
      word.concat(s); 
     } 
     System.out.print(word); 
     MyScan.close(); 
    } 
} 

답변

0

String의는 불변를 얻을 수 없다. 이것은 어떤 String에 전화 할 작업을 수정, 당신이 순서대로 원래 값으로 그 결과를 할당 할 필요가 있음을 의미 실제로 word.concat(s) 새로운 인스턴스를 만듭니다. 그래서 경우에 당신은 단순히 word.concat(s) 대신 word = word.concat(s)를 입력해야합니다.

그것을 수정하고 word에 할당하지 않는 한, 그 값은 그대로 유지됩니다.

0

을 당신은 값을 할당해야 의 대문자와 소문자의 변환과 문자열의 새로운 인스턴스를 생성하기위한 연결은 자바에서 불변이다. 그림과 같이 다음 행을 변경하십시오. 이 연결에 대한 StringBuffer를 사용하고, `

public static String everyOtherLowerCase(String input) {  
    input = input.toLowerCase(); 

    StringBuffer result = new StringBuffer(""); 

    for(int x=0; x<input.length(); x++) { 
     Character c = input.charAt(x); 

     if(x % 2 == 0) result.append(c); 
     else result.append(Character.toUpperCase(c)); 
    } 

    return result.toString(); 
} 

`

다른 사람들이 지적했듯이 문자 대신 문자열로 각 문자를 다루는 -

UI = UI.toLowerCase(); 
s = s.toUpperCase(); 
word = word.concat(s); 
0

여기에 대체 구현입니다 , 문자열은 변경할 수 없습니다. String 객체를 끊임없이 다시 생성하고 다시 할당하는 것이 아니라 성능상의 이유로 StringBuffer에 추가하는 것이 가장 좋습니다. 이것은 Java에서 꽤 일반적인 성능 오 진 단계입니다.

0

다른 답변은 정확하지만 명확하게 작성하려고합니다.

문자열은 변경 불가능한이며 변경할 수 없습니다. 그러나 당신은 새로운 문자열을 만들어 동일한 변수에 할당 할 수 있습니다. String의 방법 중 어느 것도 콘텐츠를 변경하지 않습니다. 많은 사람들이 새로운 String을 반환합니다. 그래서 :

String s = "Hello"; 
s.replace("H","J"); 

이 ... "젤로"의 새로운 String를 생성, 는 멀리가 발생합니다.

String s1 = "Hello"; 
String s2 = s.replace("H","J"); 

는 ... "젤로"의 새로운 String를 만들고 s2에 할당합니다.
String s1 = "Hello"; 
s1 = s1.replace("H","J"); 

는 ... "젤로"의 새로운 String을 생성 이전에 s1에 할당 된 String를 ("안녕하세요") 버리고, s1에 할당합니다.

클래스 StringBuilder을 수행 할 때에서 문자 시퀀스를 원하는대로 수정하려고합니다.

StringBuilder sb = new StringBuilder("Hello"); 
sb.replace(0,1,"J"); 

... sb에는 "Hello"대신 "Jello"가 포함됩니다.

이 지식은 프로그램을 수정하는 데 필요한 것을 제공해야합니다.

관련 문제