2017-10-10 22 views
1

我寫了接受一個字符串參數並返回字符串,更改字符大小寫以下列方式產生代碼:安排字母在一行

  1. 所有元音字母必須大寫(元音是,E,I,O,U)
  2. 所有輔音字母必須爲小寫
  3. 未字母不得更改

這裏的任何字符是我的代碼:

public class Simple { 

    public char ChangeCase() { 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("Enter an input String: "); 
     String inputString = scanner.nextLine(); 
     //String isVowel = "aeiou"; 
     char c='\0'; 
     for (int i = 0; i < inputString.length(); i++) { 
      c = inputString.charAt(i); 
      if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'||c=='A'||c=='E'||c=='I'||c=='O'||c=='U') { 
       c = Character.toLowerCase(c); 

       System.out.println(c); 
      } 
      else if (c=='b'||c=='c'||c=='d'||c=='f'||c=='g'||c=='h'||c=='j'||c=='k'||c=='l'||c=='m'||c=='n'||c=='p'||c=='q'||c=='r'||c=='s'||c=='t'||c=='v'||c=='w'||c=='x'||c=='y'||c=='z'|| 
       c=='B'||c=='C'||c=='D'||c=='F'||c=='G'||c=='H'||c=='J'||c=='K'||c=='L'||c=='M'||c=='N'||c=='P'||c=='Q'||c=='R'||c=='S'||c=='T'||c=='V'||c=='W'||c=='X'||c=='Y'||c=='Z'){ 
       c = inputString.charAt(i); 
       c =Character.toUpperCase(c); 
       System.out.println(c); 
      } 
      else if(c=='@'||c=='!'||c=='"'||c==' '||c=='!'||c=='"'||c=='#'||c=='$'||c=='%'||c=='&'||c=='('|| c==')'||c=='*'||c=='+'||c==','||c=='-'||c=='.'||c=='/'||c==':'||c==';'||c=='<'||c=='='||c=='>'||c=='?'||c=='['||c==']'||c=='^'||c=='_'||c=='`'||c=='{'||c=='|'||c=='}'||c=='~'||c=='"'){ 
       c=inputString.charAt(i); 
       c=c; 
       System.out.println(c); 
      } 
      else 
       c=c; 

     } 

     return c; 

    } 
} 

亞軍類:

public class Runner { 
    public static void main(String[] args) { 
     Simple smpl=new Simple(); 
     smpl.ChangeCase(); 

    } 

} 

結果當我輸入你好,我得到:

Enter an input String: hello 
H 
e 
L 
L 
o 

預期結果:

HeLLo 

我應該改變,以獲得預期的結果?

回答

3

更改printlnprint因爲println將始終添加一行。

+0

'print'給了我這樣的: '你好[INFO]於NetBeans ExecEvent:{ 「魔力」:{ 「IMPL」: 「org.codehaus.mojo.exec.ExecMojo」, 「網址」:「文件:\ /家\ /布萊恩\ /平方米\ /庫\ /組織\/Codehaus的\ /魔力\/exec- Maven的插件\ /1.2.1 \ /exec-maven-plugin-1.2.1.jar 「」 文件:\ /家\ /布萊恩\ /平方米\ /庫\ /組織\ /阿帕奇\ /行家\ /報告\/Maven的報告-API \ /2.0.6 \ /maven-reporting-api-2.0.6.jar 「」 文件:\ /家\ /布萊恩\ /平方米\ /庫\ /組織\/apache的。 \ /行家\/doxia \/doxia灌入API \ /1.0-alpha-7 \ /doxia-sink-api-1.0-alpha-7.jar 「」 文件:\ /家\ /布萊恩\ /平方米\ /庫\ /公地CLI \ /公地CLI \ /1.0 \/COMM '' – bademba

+1

在你的'return c;'語句之前添加一個'System.out.print(System.lineSeparator())'''''' – jontro

+0

感謝哥們,你釘了它。 – bademba

3

更改println()print()從輸出中省略換行字符。交換toUpperCasetoLowerCase以使代碼完成規範要求的操作。

您目前還不打印其他字符,如換行符(要求「任何不是字母的字符都不能改變」)。 擺脫第二else ifelse分支機構,並與

else { 
    System.out.print(c); 
} 

而且擺脫了額外c = inputString.charAt(i);語句替換它們。你只需要第一個。

關於你正在解決的問題,如果我是你,我會使用正則表達式。

無論如何,這裏是Simple.java與應用,以及一些其他改進一個解決方案,而正則表達式:

import java.util.Scanner; 

public class Simple { 

    public void ChangeCase() { 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("Enter an input String: "); 
     String inputString = scanner.nextLine(); 
     String vowels = "aeiouAEIOU"; 
     for (char c: inputString.toCharArray()) { 
      if (vowels.indexOf(c) != -1) { // found vowel 
       c = Character.toUpperCase(c); 
      } else if (Character.isLetter(c)) { // must be a consonant 
       c = Character.toLowerCase(c); 
      } 
      System.out.print(c); 
     } 
    } 
} 
+1

'print'給我這個:'HeLLo [INFO] NETBEANS-ExecEvent:{「mojo」:{「impl」:「org.codehaus.mojo.exec。 ËxecMojo 「 」網址「:」 網絡文件:\ /家\ /布萊恩\ /米2 \ /庫\ /組織\/Codehaus的\ /魔力\/EXEC -maven-插件\ /1.2.1 \/EXEC-行家-插件-1.2.1.jar 「」 文件:\ /小時OME \ /布賴恩\ /平方米\/REP ository \ /組織\ /阿帕奇\ /行家\ /報告\/Maven的報告-API \ /2.0.6\/maven-report荷蘭國際集團-API-2.0.6.jar 「」 文件:\ /家\ /布萊恩\/.m2目錄\ /儲存庫\ /組織\ /阿帕奇\ /行家\/DOX IA \/doxia散熱器-API \/1.0-α-7 \/doxia-S墨-API-1.0 -alpha-7. jar「,」file:\/home \/b rian \ /。m2 \/repositor y – bademba

+0

好極了,它似乎在工作! – neuhaus

1

作爲第一個啓動器 - 只需簡單更換

c = Character.toLowerCase(c); 

分別是其他呼叫在你的if塊中做toUpperCase()

你的代碼基本上是正確的 - 你只是改變了錯誤的地方。所以只需「交換」這些電話!當然 - 不要使用println() - 因爲這會打印出一個「行」 - 意味着它最後會添加一個「新行」。

0

只需使用print()方法而不是println(),因爲println()總是添加新行。

+0

使用'print'給了我奇怪的東西,不需要'HeLLo [INFO] NETBEANS-ExecEvent:{「mojo」:{「impl」:「org.codehaus.mojo.exec.E xecMojo」,「urls」:[「fi樂:\ /家\ /布萊恩\ /米2 \ /庫\ /組織\/Codehaus的\ /月喬\/EXEC -maven-PLU杜松子酒\ /1.2.1 \/exec -m' – bademba

0

一是一些提示更好的代碼:

  1. Structorize酸代碼,所以請使用方法每一步(IF)。
  2. 只有帶1個字母的變量應該是一個迭代變量,但最好不要只有1個字母的變量。 (三)

這裏是一些簡單的例子,你(可以被優化):

public class Simple { 
    public void ChangeCase() { 
     String resultString; 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("Enter an input String: "); 
     String inputString = scanner.nextLine(); 

     // make alle chars lower-case 
     resultString = inputString.toLowerCase(); 

     // make vowels upper-case 
     resultString = uppercaseVowels(resultString); 

     // print the result or change to return String for main() 
     System.out.println("Input: " + inputString); 
     System.out.println("Result: " + resultString); 
    } 

    private String uppercaseVowels(String inputString) { 
     inputString = inputString.replace('a', 'A'); 
     inputString = inputString.replace('e', 'E'); 
     inputString = inputString.replace('i', 'I'); 
     inputString = inputString.replace('o', 'O'); 
     inputString = inputString.replace('u', 'U'); 
     return inputString; 
    } 
} 
+0

只在最後打印,所以速度要快一點。但是如果你需要一步一步的操作,你可以將uppercaseVowels() - Method更改爲CHAR,並在stringBuilder中爲每個字符調用它(inputString.tolowercase()); – LenglBoy

+0

代碼將通過循環來識別元音和輔音來給出其餘規則? – bademba

+0

不,這個代碼只是設置所有的小寫字母,然後是大寫的所有元音。因此,常量很小,「未觸摸」,元音大寫,其他字符與beforre相同,因爲大寫/小寫忽略。 這段代碼正在打印和做你想做的事情,但結構更好,更短,沒有必要的迭代。 – LenglBoy