2013-04-28 2 views
4

Я пытаюсь создать короткую программу, которая преобразует все буквы в верхнем регистре в нижний регистр (из ввода командной строки).Java - конвертировать нижний в верхний регистр без использования toUppercase()

Следующие компиляции, но не дают мне результата, которого я ожидаю. В чем причина этого?

Eg) Java toLowerCase Banana -> дать выход банан

public class toLowerCase{ 
public static void main(String[] args){ 

toLowerCase(args[0]); 
} 

public static void toLowerCase(String a){ 

for (int i = 0; i< a.length(); i++){ 

    char aChar = a.charAt(i); 
    if (65 <= aChar && aChar<=90){ 
    aChar = (char)((aChar + 32)); 
    } 

    System.out.print(a); 
} 
} 

}

ответ

1

Выглядит как домашнее задание для меня, только намек. Вы печатаете строку a, тогда как вы изменяете char тип aChar, не изменяя исходную строку a. (Помните, что строки неизменяемы).

+0

Hm. Так я должен создать новую пустую строку, в которую я добавляю новые типы символов? –

+0

@BettyJones, да, это может быть один из способов, или вы можете просто напечатать новый созданный символ, так как вы не возвращаете строку. – Habib

+0

О, хорошая точка. Большое спасибо!! –

0
public static void toLowerCase(String a){ 

    String newStr = ""; 

    for (int i = 0; i< a.length(); i++){ 

     char aChar = a.charAt(i); 
     if (65 <= aChar && aChar<=90){ 
      aChar = (char)((aChar + 32)); 
     } 
     newStr = newStr + aChar;  
    } 
    System.out.println(newStr); 
} 

Вы должны напечатать newStr вне для цикла. Вы пытались напечатать его внутри петли

8

Вы печатаете Stringa, не изменяя его. Вы можете печатать шар непосредственно в петле следующим образом:

public class toLowerCase 
{ 
    public static void main(String[] args) 
    { 
     toLowerCase(args[0]); 
    } 

    public static void toLowerCase(String a) 
    { 
     for (int i = 0; i< a.length(); i++) 
     { 
      char aChar = a.charAt(i); 
      if (65 <= aChar && aChar<=90) 
      { 
       aChar = (char)((aChar + 32)); 
      } 
      System.out.print(aChar); 
     } 
    } 
}  
1

Похоже, вы рядом. :)

Для начала ...

char aChar = a.charAt(i); 

«а» представляет собой массив строк, поэтому я считаю, вы хотите перебрать каждый элемент

char aChar = a[i].charAt(0); 

и это также кажется, вы хотите вернуть значение измененной переменной, а не «a», которая была первоначально передана в переменной.

System.out.print(aChar); 

не

System.out.print(a); 

Надежда, что помогает.

+0

Получил, спасибо много! –

+0

Awesome. Вы можете выбрать ответ в качестве правильного ответа? :) –

1

уборщик способ написания этого кода

public static void printLowerCase(String a){ 
    for(char ch: a.toCharArray()) { 
     if(ch >= 'A' && ch <= 'Z') 
      ch += 'a' - 'A'; 
     System.out.print(ch); 
    } 
} 

Примечание: это не будет работать для символов верхнего регистра в любом другом диапазоне. (Есть 1000 с ними)

1
/** 
    * Method will convert the Lowercase to uppercase 
    * if input is null, null will be returned 
    * @param input 
    * @return 
    */ 
    public static String toUpperCase(String input){ 
      if(input == null){ 
       return input; 
      } 
      StringBuilder builder = new StringBuilder(); 
      for(int i=0;i<input.length();i++){ 
       char stringChar = input.charAt(i); 

       if(92 <= stringChar && stringChar <=122){ 
        stringChar = (char)((stringChar - 32)); 
        builder.append(stringChar); 
       } 
       else if (65 <= stringChar && stringChar<=90) 
       { 
        builder.append(stringChar); 
       } 
      } 
      if(builder.length() ==0){ 
       builder.append(input); 
      } 
      return builder.toString(); 
     } 
-3
import java.util.Scanner; 
public class LowerToUpperC { 

    public static void main(String[] args) { 

     char ch; 
      int temp; 
      Scanner scan = new Scanner(System.in); 

      System.out.print("Enter a Character in Lowercase : "); 
      ch = scan.next().charAt(0); 

      temp = (int) ch; 
      temp = temp - 32; 
      ch = (char) temp; 

      System.out.print("Equivalent Character in Uppercase = " +ch); 

    } 

} 
+1

, пожалуйста, проверьте свое форматирование и добавьте некоторое объяснение. Ответ не дает возможности, которые задавал автор вопроса, поскольку он преобразует только один символ. –

0
public class Changecase 
{ 
    static int i; 

    static void changecase(String s) 
    { 
     for(i=0;i<s.length();i++) 
     { 
      int ch=s.charAt(i); 
      if(ch>64&&ch<91) 
      { 
       ch=ch+32; 
       System.out.print((char) ch); 
      } 
      else if(ch>96&&ch<123) 
      { 
       ch=ch-32; 
       System.out.print((char) ch); 
      } 
      if(ch==32) 
      System.out.print(" "); 
     } 
    } 

    public static void main (String args[]) 
    { 

     System.out.println("Original String is : "); 
     System.out.println("Alive is awesome "); 
     Changecase.changecase("Alive is awesome "); 

    } 
} 
+0

Этот код не изменяет регистр в строке, а просто печатает символы с переменным кодом. Он не распечатывает ничего для символов, которые не являются буквами или пробелами. Он вообще не обрабатывает символы, отличные от ASCII. Причина, по которой код опроса проваливается, заключается в том, что он должен вычесть 32, а не добавить 32, в символы в диапазоне 65 ... 90. –

0
public class MyClass 
{ 
    private String txt; 
    private char lower; 
    public MyClass(String txt) 
    { 
     this.txt = txt; 
    } 
    public void print() 
    { 
     for(int i=0;i<txt.length();i++) 
     { 
      if('A' <= txt.charAt(i) && txt.charAt(i) <= 'Z') 
      { 
       lower = (char)(txt.charAt(i) + 32); 
       System.out.print(lower); 
      } 
      else 
      { 
       lower = txt.charAt(i); 
       System.out.print(lower); 
      } 
     } 
    } 
    public static void main(String[] args) 
    { 
     MyClass mc = new MyClass("BaNaNa"); 
     mc.print(); 
    } 
} 

К сожалению довольно поздно на сцену, но это должно решить. Условие else, потому что, когда оно не равно нулю, оно полностью отбрасывает алфавит.

0

Если кто-то нуждается в четкой код без MagicNumbers и как можно меньше преобразований здесь мое решение:

final char[] charArray = new char[string.length()]; 
for (int i = 0; i < string.length(); i++) { 
    char c = string.charAt(i); 
    charArray[i] = Character.isLowerCase(c) ? Character.toUpperCase(c) : Character.toLowerCase(c); 
} 
String.valueOf(charArray);