2013-04-28 43 views
4

我試圖創建一個簡短的程序,將所有大寫字母轉換爲小寫字母(來自命令行輸入)。Java - 不使用toUppercase將下部轉換爲大寫

以下編譯但不給我我期待的結果。這是什麼原因?

EG)的Java toLowerCase香蕉 - >給香蕉

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

嗯。所以,我應該創建一個新的空字符串,我添加新的字符類型? – 2013-04-28 03:29:03

+0

@BettyJones,是的,這可能是一種方法,或者你可以只打印新創建的字符,因爲你沒有返回字符串。 – Habib 2013-04-28 03:31:54

+0

哦好點。非常感謝!! – 2013-04-28 03:34:11

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 for循環。您正試圖在循環內打印它

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); 

「a」是一個字符串數組,所以我相信你會想遍歷每個元素

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

而且似乎也喜歡你想返回修改變量的值,而不是最初傳入變量的「a」。

System.out.print(aChar); 

System.out.print(a); 

希望幫助你。

+0

明白了,非常感謝! – 2013-04-28 03:37:48

+0

太棒了。你能選擇一個答案作爲正確的答案嗎? :) – 2013-04-28 03:50:31

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

請檢查您的格式並添加一些解釋。答案沒有提供問題作者所要求的功能,因爲它只轉換單個字符。 – 2017-01-10 18:04:41

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,而不是32到65到90之間的字符。 – 2017-02-23 17:25:36

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(); 
    } 
} 

對不起已經很晚了現場,但是這應該解決這個問題。其他條件,因爲當它不是零它完全丟棄字母表。

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);