2013-02-20 70 views
7

वैकल्पिक रूप से ऐसा कोई भी टेक्स्ट बॉक्स में टाइप किया गया है प्रदर्शितकैसे अक्षरों कम करने के लिए अपर केस पत्र और और ऊपरी केस अक्षरों पर लोअर केस अक्षरों में परिवर्तित करने

//  in either Capital or lowercase depending on the original 
//  letter changed. For example: CoMpUtEr will convert to 
//  cOmPuTeR and vice versa. 
    Switch.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 

      String characters = (SecondTextField.getText()); //String to read the user input 
      int length = characters.length(); //change the string characters to length 

     for(int i = 0; i < length; i++) //to check the characters of string.. 
     {    
      char character = characters.charAt(i);   

      if(Character.isUpperCase(character)) 
      { 
       SecondTextField.setText("" + characters.toLowerCase()); 

      } 
      else if(Character.isLowerCase(character)) 
      { 
       SecondTextField.setText("" + characters.toUpperCase()); //problem is here, how can i track the character which i already change above, means lowerCase** 
       }    
     }}  
    }); 
+2

आपके पास एक 'else', इसलिए यदि यह ऊपरी मामले के रूप में शुरू होता है यह' if' के 2 शाखा के माध्यम से जाना नहीं होगा। यदि यह कम मामले के रूप में शुरू होता है तो यह दूसरी शाखा (और पहले नहीं) के माध्यम से जाएगा - वास्तव में आपको क्या समस्या है? – John3136

+0

सहमत हुए। ऐसा लगता है कि यह पहले से ही काम कर रहा है –

+0

ओह मुझे समस्या दिखाई दे रही है .. अक्षर सेट न करें। ToperperCase() या इसी तरह। एक समय में केवल एक चरित्र को बदलें। आपका लूप पहले से ही ऐसा करने के लिए स्थापित है, लेकिन आप पूरे स्ट्रिंग के मामले को बदल रहे हैं। –

उत्तर

14

setText टेक्स्ट सामग्री को ठीक से बदल रहा है जो आप इसे देते हैं, इसे शामिल नहीं करते हैं।

पहले, तो यह सीधे लागू क्षेत्र से कन्वर्ट String ...

String value = "This Is A Test"; 
StringBuilder sb = new StringBuilder(value); 
for (int index = 0; index < sb.length(); index++) { 
    char c = sb.charAt(index); 
    if (Character.isLowerCase(c)) { 
     sb.setCharAt(index, Character.toUpperCase(c)); 
    } else { 
     sb.setCharAt(index, Character.toLowerCase(c)); 
    } 
} 

SecondTextField.setText(sb.toString()); 
+0

आप मुझसे तेज थे = \, अभी भी +1 –

+2

@LuiggiMendoza जब आप प्रश्न संपादित कर रहे थे तो मैं लिख रहा था;) – MadProgrammer

5

आप ट्रैक करने के लिए है कि क्या आप है की जरूरत नहीं है पहले ही चरित्र को ऊपरी से नीचे तक बदल दिया है। आपका कोड पहले से ही कर रही है कि यह मूल रूप से है, क्योंकि:

1 for each character x: 
2  if x is uppercase: 
3   convert x to lowercase 
4  else: 
5   if x is lowercase: 
6    convert x to uppercase. 

सच है कि आप है कि वहाँ में else (लाइन 4 पर) इसका मतलब है कि एक चरित्र है कि शुरू में अपरकेस गया था कभी नहीं दूसरे if बयान में (पर जाँच की जाएगी लाइन 5)।

उदाहरण, A से शुरू करें। क्योंकि यह अपरकेस है, इसे लाइन 3 पर लोअरकेस में परिवर्तित कर दिया जाएगा और फिर आप अगले वर्ण के लिए लाइन 1 पर वापस जायेंगे।

यदि आप z से शुरू करते हैं, तो लाइन 2 पर if आपको सीधे लाइन 5 पर भेज देगा जहां इसे अपरकेस में परिवर्तित किया जाएगा। कुछ भी जो न तो ऊपरी और न ही लोअरकेस if कथन दोनों विफल हो जाएगा और इसलिए छूटे रहेंगे।

3

समस्या यह है कि आप मूल स्ट्रिंग में हर चरित्र की जाँच के बाद SecondTextField का मान सेट की कोशिश कर रहे है। आपको एक समय में एक तरफ "पक्ष में" रूपांतरण करना चाहिए, और उसके बाद परिणाम को SecondTextField में सेट करना चाहिए।

जैसे ही आप मूल स्ट्रिंग से गुज़रते हैं, आउटपुट को खाली स्ट्रिंग से लिखना शुरू करें। जब तक आप पात्रों से बाहर नहीं हो जाते तब तक चरित्र को विपरीत मामले में जोड़ना जारी रखें। आउटपुट तैयार होने के बाद, इसे SecondTextField में सेट करें।

आप आउटपुट String बना सकते हैं, इसे एक खाली स्ट्रिंग "" पर सेट करें, और जैसे ही आप जाते हैं उसे वर्ण संलग्न करें। यह काम करेगा, लेकिन यह एक अक्षम दृष्टिकोण है। एक बेहतर दृष्टिकोण StringBuilder वर्ग का उपयोग करेगा, जो आपको पूरी चीज़ को फेंकने के बिना स्ट्रिंग को बदलने देता है।

2
String name = "Vikash"; 
String upperCase = name.toUpperCase(); 
String lowerCase = name.toLowerCase(); 
+6

कृपया कोड पोस्ट न करें। अपने कोड के बारे में कुछ स्पष्टीकरण या जानकारी या उपयोग दें। उदाहरण के लिए, [यह उत्तर] देखें (http://stackoverflow.com/a/16893057/756941)। – NAZIK

4

उपयोग कर सकते हैं यह एक बेहतर तरीका है: -

void main()throws IOException 
{ 
    System.out.println("Enter sentence"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String str = br.readLine(); 
    String sentence = ""; 
    for(int i=0;i<str.length();i++) 
    { 
     if(Character.isUpperCase(str.charAt(i))==true) 
     { 
      char ch2= (char)(str.charAt(i)+32); 
      sentence = sentence + ch2; 
     } 
     else if(Character.isLowerCase(str.charAt(i))==true) 
     { 
      char ch2= (char)(str.charAt(i)-32); 
      sentence = sentence + ch2; 
     } 
     else 
     sentence= sentence + str.charAt(i); 

    } 
    System.out.println(sentence); 
} 
0
public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    String satr=scanner.nextLine(); 
    String newString = ""; 
    for (int i = 0; i < satr.length(); i++) { 
     if (Character.isUpperCase(satr.charAt(i))) { 
      newString+=Character.toLowerCase(satr.charAt(i)); 
     }else newString += Character.toUpperCase(satr.charAt(i)); 
    } 
    System.out.println(newString); 
} 
+0

हाय उमरजोन, भविष्य के उत्तरों पर आपके उत्तर पर एक संक्षिप्त स्पष्टीकरण जोड़ने का प्रयास करें जो आपके समाधान को समझने के लिए प्रश्न पोस्ट करता है और – Lupin

1

यहाँ आप कुछ अन्य संस्करण हैं:

सार्वजनिक वर्ग केवल अंकों {

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter a word to check: "); 
    String checkWord = sc.nextLine(); 
    System.out.println(isPalindrome(checkWord)); 
    sc.close(); 

} 

public static boolean isPalindrome(String str) {   
    StringBuilder secondSB = new StringBuilder(); 
    StringBuilder sb = new StringBuilder(); 
    sb.append(str); 
    for(int i = 0; i<sb.length();i++){ 
     char c = sb.charAt(i); 
     if(Character.isUpperCase(c)){ 
      sb.setCharAt(i, Character.toLowerCase(c)); 
     } 
    } 
    secondSB.append(sb); 
    return sb.toString().equals(secondSB.reverse().toString()); 
} 

}

0

यहाँ ascii मूल्यों के माध्यम से समान समाधान का एक और संस्करण है।

import java.io.*; 
import java.util.*; 
class example_2 
{ 
    static Scanner sc; 
    static PrintWriter out; 

    static void init() throws Exception 
    { 
     sc=new Scanner(new File("si.txt")); 
     out=new PrintWriter(new File("so.txt")); 
    } 

    public static void main(String args[]) throws Exception 
    { 
     init(); 
     char[] a=sc.next().toCharArray(); 
     for(int i=0;i<a.length;i++) 
     { 
      if(a[i]>=97 && a[i]<=122) 
      { 
       a[i]-=32; 
      } 
      else 
      { 
       a[i]+=32; 
      } 
     } 
     for(char ch:a) 
     { 
      out.print(ch); 
     } 
     out.close(); 
    } 
} 
0
public class Toggle { 
public static String toggle(String s) { 
    char[] ch = s.toCharArray(); 

    for (int i = 0; i < s.length(); i++) { 
     char charat = ch[i]; 
     if (Character.isUpperCase(charat)) { 
      charat = Character.toLowerCase(charat); 
     } else 
      charat = Character.toUpperCase(charat); 
     System.out.print(charat); 
    } 
    return s; 
    } 

public static void main(String[] args) { 
    toggle("DivYa"); 
    } 
    } 
+1

से सीखता है, जबकि इस कोड स्निपेट का स्वागत है, और कुछ सहायता प्रदान कर सकता है, यह होगा [अगर इसमें एक स्पष्टीकरण शामिल है तो बहुत सुधार हुआ है] (// meta.stackexchange.com/q/114762) * कैसे * और * क्यों * यह समस्या हल करता है। याद रखें कि आप भविष्य में पाठकों के लिए सवाल का जवाब दे रहे हैं, न केवल उस व्यक्ति से पूछ रहे हैं! स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें, और संकेत दें कि कौन सी सीमाएं और धारणाएं लागू होती हैं। –

0
import java.util.Scanner; 
class TestClass { 
    public static void main(String args[]) throws Exception { 
     Scanner s = new Scanner(System.in); 
     String str = s.nextLine(); 
     char[] ch = str.toCharArray(); 
     for (int i = 0; i < ch.length; i++) { 
      if (Character.isUpperCase(ch[i])) { 
       ch[i] = Character.toLowerCase(ch[i]); 
      } else { 
       ch[i] = Character.toUpperCase(ch[i]); 
      } 
     } 
     System.out.println(ch); 
    } 
} 
2

यह कोई भी स्ट्रिंग समारोह का उपयोग किए बिना एक बेहतर तरीका है।

public static String ReverseCases(String str) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < str.length(); i++) { 
     char temp; 
     if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') { 
     temp = (char)(str.charAt(i) - 32); 
     } 
     else if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z'){ 
     temp = (char)(str.charAt(i) + 32); 
     } 
     else { 
     temp = str.charAt(i); 
     } 

     sb.append(temp); 
    } 
    return sb.toString(); 
    } 
0
StringBuilder b = new StringBuilder(); 

Scanner s = new Scanner(System.in); 
String n = s.nextLine(); 

for(int i = 0; i < n.length(); i++) { 
    char c = n.charAt(i); 

    if(Character.isLowerCase(c) == true) { 
     b.append(String.valueOf(c).toUpperCase()); 
    } 
    else { 
     b.append(String.valueOf(c).toLowerCase()); 
    } 
} 

System.out.println(b); 
+0

क्या आप अपने उत्तर पर विस्तार कर सकते हैं? किसी भी पाठ के बिना कोड का एक टुकड़ा पोस्ट करना अक्सर बहुत उपयोगी नहीं होता है। –

0
//This is to convert a letter from upper case to lower case 
import java.util.Scanner; 
    public class ChangeCase { 
     public static void main(String[]args) { 

      String input; 
      Scanner sc= new Scanner(System.in); 
       System.out.println("Enter Letter from upper case"); 
       input=sc.next(); 

      String result; 
      result= input.toLowerCase(); 
      System.out.println(result); 
     } 
    } 
संबंधित मुद्दे