2016-10-18 5 views
1

私はデコーダプログラムをやっています。教師によって印刷された指示は次のとおりです。小文字を大文字にする最も簡単な方法は何ですか?

小文字は大文字になります。

大文字は小文字になります。

数字0-9-J

なる任意の他の文字は、この方法は、最大入力し、その後読み取りに負担をかける最も簡単かつ少なくともされる#

になりますか?私は、コマンドの場合は使用して考えますが、持っていた:

if(let=a||let=b||let=c); //and so on and so forth, rinse and repeat for uppercase letters. 

は本当に読めなくなり、ちょうど私のタイピングの手を殺すでしょう。

+0

はあなたが提供しているJDKのAPIを使用するのではなく、自分自身のコードを書きたいことを意味していますか? –

+1

Javaライブラリには、文字が大文字、小文字、または数字かどうかを判断するためのメソッドがjava.lang.Characterクラスにあります。それはあなたの人生をはるかに簡単にします。また、大文字と小文字に変換するメソッドもあります。数字を文字に変換するには、数字と文字の数値が同じ順序であるという事実に頼ることができます。 –

+1

@ saka1029はい、そして?両方の例で正しいです。私はちょっと難しいかもしれない数字を推測します。おそらく 'ch> = '0' && ch <= '9''をチェックする方が良いかもしれませんが、文字の場合は問題にはなりません。大文字と小文字はそのように扱われます。 –

答えて

-1

java.lang.Characterをご覧ください。

Character.isLowerCase('a')Character.toUpperCase('a')のような方法があります。

+0

彼の質問を理解する。彼はAbcDを持っているなら、彼はaBCdをやりたいと思っています...ちょうど上または下でそれはすべての文字を変換します –

+0

答えを理解する。 'Character'のメソッドは、文字列全体ではなく、単一の文字で動作します。 – Thilo

2

これは割り当てなので、私はちょうどヒントを(ちょうどそれを行う唯一の方法ではない、ただ一つの方法)与えるだろう。あなたはそれを行うためのよりプログラム的な方法があることは間違いありません。それはcharsが簡単に数字に変換されて戻ってくるということを利用することになるでしょう(Stringsはそれほど操作しにくいですが)。たとえば、Linuxでは...

1

thisページcharintへのマッピングをチェックアウトし、何があなたに飛び出すかどうかを確認し、我々は文字我々が実装することができJava

[email protected]:~$ echo "abcdABCD1234" | tr "a-zA-Z0-9" "A-Za-zA-J" 
ABCDabcdBCDE 
[email protected]:~$ 

に代わるtrコマンドを持っていますchar

public static void main(String[] args) { 
    String str = "abcdefghABCDEFGHI1234%*@)@*#&"; 
    String from = "a-zA-Z0-9"; 
    String to = "A-Za-zA-J"; 
    final char remaining = '#'; 
    String replaced = tr(from, to, remaining, str); 
    System.out.println(replaced); 
} 

private static String tr(String from, String to, char def, String str) { 
    Map<Character, Character> trMap = buildTRMap(from, to); 
    return str.chars().mapToObj(ch -> trMap.getOrDefault((char) ch, def) + "").collect(Collectors.joining()); 
} 

private static Map<Character, Character> buildTRMap(String from, String to) { 
    Map<Character, Character> trMap = new HashMap<>(); 
    for (int i = 0; i < from.length(); i++) { 
     if (i + 2 < from.length() && from.charAt(i + 1) == '-') { 
      char fromStart = from.charAt(i); 
      char fromEnd = from.charAt(i + 2); 
      char toStart = to.charAt(i); 
      char toEnd = to.charAt(i + 2); 
      List<Character> fromL = IntStream.rangeClosed(fromStart, fromEnd).mapToObj(c -> (char) c).collect(Collectors.toList()); 
      List<Character> toL = IntStream.rangeClosed(toStart, toEnd).mapToObj(c -> (char) c).collect(Collectors.toList()); 
      IntStream.range(0, fromL.size()).forEach(in -> trMap.put(fromL.get(in), toL.get(in))); 
      i += 2; 
     } else { 
      trMap.put(from.charAt(i), to.charAt(i)); 
     } 
    } 
    return trMap; 
} 

出力

を交換する trに類似
ABCDEFGHabcdefghiBCDE######## 
+0

@Shreyas、A-J〜0-9は質問には載っていません – Saravana

+0

はい、私はそれを他の方法で読む –

0

これは簡単な解決策が今考えることができますすることができます

for(int i=0;i<str.length();i++){//First it checks for numbers 0-9 and replaces them with characters between A to J, else if alphabets found, converts it to uppercase and lowercase, else convert that character to # 

     if(str.charAt(i)=='0'){ 
      str.setCharAt(i, 'A'); 
     }else if(str.charAt(i)=='1'){ 
      str.setCharAt(i, 'B'); 
     }else if(str.charAt(i)=='2'){ 
      str.setCharAt(i, 'C'); 
     }else if(str.charAt(i)=='3'){ 
      str.setCharAt(i, 'D'); 
     }else if(str.charAt(i)=='4'){ 
      str.setCharAt(i, 'E'); 
     }else if(str.charAt(i)=='5'){ 
      str.setCharAt(i, 'F'); 
     }else if(str.charAt(i)=='6'){ 
      str.setCharAt(i, 'G'); 
     }else if(str.charAt(i)=='7'){ 
      str.setCharAt(i, 'H'); 
     }else if(str.charAt(i)=='8'){ 
      str.setCharAt(i, 'I'); 
     }else if(str.charAt(i)=='9'){ 
      str.setCharAt(i, 'J'); 
     }else if(Character.isLowerCase(str.charAt(i))){ 
      str.setCharAt(i, Character.toUpperCase(str.charAt(i))); 
     }else if(Character.isUpperCase(str.charAt(i))){ 
      str.setCharAt(i, Character.toLowerCase(str.charAt(i))); 
     }else{ 
      str.setCharAt(i, '#'); 
     } 
    } 
関連する問題