2016-12-28 1 views
-1

문자열을 가져와 문자열의 각 문자에 대해 대문자를 낮추고 낮추려면 Java 프로그래밍 1 클래스의 프로젝트에서 작업하고 있습니다. 지금까지 내 코드는 무엇이든간에 출력을 위해 최종 문자열을 반환하도록 프로그램을 가져올 수 없습니다.for 루프에서 문자열 반환

import java.util.*; 

public class LowerUpper { 
    public static void Main(String[] args) { 
     Scanner letters = new Scanner(System.in); 
     System.out.println("Please enter 3 letters:"); 
     String input = letters.next(); 
     int length = input.length(); 

     for (int i = 0; i < length; i++){ 
      if (Character.isUpperCase(input.charAt(i))) { 
       Character.toLowerCase(input.charAt(i)); 
       break; 
      } 
      else if (Character.isLowerCase(input.charAt(i))) { 
       Character.toUpperCase(input.charAt(i)); 
       break; 
      } 
      return input.toString(); 
     } 
    } 
} 

미리 도움을 청하십시오! 나는 이것이 내가 누락 된 단순한 해결책 일 것이라고 확신한다. StringBuilder

+0

문자열은 변경 가능하지 않습니다. 코드에서 문자열을 변경하지 않고 해당 문자의 상위/하위 복사본 만 가져옵니다. "abcd"와 같은 String.toUpperCase()와 String.toLowerCase() 메소드를 사용해보십시오. toUpperCase(); –

답변

0

사용에 변환 된 문자를 유지합니다. 또한

당신이 다른 경우에만

StringBuilder buf = new StringBuilder(); 
for (int i = 0; i < length; i++){ 
    if (Character.isUpperCase(input.charAt(i))) { 
    buf.append (Character.toLowerCase(input.charAt(i))); 
    // break; 
    } 
    else { 
    buf.append (Character.toUpperCase(input.charAt(i))); 
    // break; 
    } 
} 

return buf.toString(); 

편집처럼

시도 첫 번째 문자 뭔가를 변환합니다 break 싶지 않아

시험 용액

String input = "this iS my test"; 
    int length = input.length(); 

    StringBuilder buf = new StringBuilder(); 
    for (int i = 0; i < length; i++){ 
     if (Character.isUpperCase(input.charAt(i))) { 
      buf.append (Character.toLowerCase(input.charAt(i))); 
      // break; 
     } 
     else { 
      buf.append (Character.toUpperCase(input.charAt(i))); 
      // break; 
     } 
    } 

    System.out.println(buf.toString()); 

출력

이, MY TEST

2

첫 번째는 main (안 Main)입니다. 둘째, String을 반환하는 두 번째 방법을 만드는 것을 잊어 버린 경우 메서드 (예 : main)에서 String을 반환 할 수 없습니다. 메소드를 얻은 후에는 메소드를 호출해야합니다. 그러나이 방법으로 시작해 봅시다. 문자를 생성 할 때 문자를 저장해야합니다. 자바 8 이상에서는

public static String swapCase(String input) { 
    return input.codePoints() 
      .map(ch -> Character.isUpperCase(ch) ? 
         Character.toLowerCase(ch) : 
         Character.toUpperCase(ch)) 
      .collect(StringBuilder::new, 
         StringBuilder::appendCodePoint, 
         StringBuilder::append).toString(); 
} 

또는 같은

public static String swapCase(String input) { 
    StringBuilder sb = new StringBuilder(); 
    char[] chars = input.toCharArray(); 
    for (char ch : chars) { 
     if (Character.isUpperCase(ch)) { 
      sb.append(Character.toLowerCase(ch)); 
     } else { 
      sb.append(Character.toUpperCase(ch)); 
     } 
    } 
    return sb.toString(); 
} 

또는 같은,

public static String swapCase(String input) { 
    StringBuilder sb = new StringBuilder(); 
    input.chars().forEachOrdered(ch -> { 
     sb.append(Character.isUpperCase(ch) ? 
       Character.toLowerCase(ch) : 
       Character.toUpperCase(ch)); 
    }); 
    return sb.toString(); 
} 

이 그 다음을 호출을 할 수

public static void main(String[] args) { 
    Scanner letters = new Scanner(System.in); 
    System.out.println("Please enter 3 letters:"); 
    String input = letters.next(); 
    System.out.printf("Original: %s, Swapped: %s%n", input, swapCase(input)); 
} 
+0

더하기 '주 (main)'를 알리기위한 코드 –

+1

스트림과 람다를 사용한다면 왜 StringBuilder를 변경하는 대신 입력을 매핑해야할까요? 부작용은 결국 악마입니다 :) –

+0

@YonaAppletree 그냥 피곤하지만 좋은 지적. 편집 됨. –