2013-02-20 147 views
7

Lần lượt hiển thị bất kỳ văn bản được gõ vào hộp văn bảnlàm thế nào để chuyển đổi chữ thường để chữ hoa chữ & và chữ cái viết hoa để giảm chữ cái viết

//  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

bạn có một 'else', vì vậy nếu nó bắt đầu như trường hợp trên nó sẽ không đi qua các chi nhánh thứ 2 của 'if'. Nếu nó bắt đầu như trường hợp thấp hơn nó sẽ đi qua chi nhánh thứ hai (và không phải là lần đầu tiên) - bạn đang gặp phải vấn đề gì? – John3136

+0

đã đồng ý. Có vẻ như nó sẽ hoạt động rồi –

+0

Oh Tôi thấy vấn đề .. Đừng đặt characters.toUpperCase() hoặc tương tự. Chỉ thay đổi một ký tự tại một thời điểm. Vòng lặp của bạn đã được thiết lập để thực hiện theo cách đó, nhưng bạn đang thay đổi toàn bộ trường hợp của chuỗi. –

Trả lời

14

setText đang thay đổi nội dung văn bản thành chính xác nội dung bạn cung cấp, không thêm nội dung đó.

Chuyển đổi String từ lĩnh vực này trước, sau đó áp dụng nó trực tiếp ...

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

Bạn đã nhanh hơn tôi = \, vẫn +1 –

+2

@LuiggiMendoza Tôi đã viết khi bạn đang chỉnh sửa câu hỏi;) – MadProgrammer

5

Bạn không cần phải theo dõi xem bạn đã đã thay đổi nhân vật từ trên xuống dưới. Mã của bạn đã làm điều đó vì nó cơ bản:

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. 

Thực tế là bạn có mà else trong đó (trên dòng 4) có nghĩa là một nhân vật mà ban đầu được chữ hoa sẽ không bao giờ được kiểm tra trong báo cáo thứ hai if (trên dòng 5).

Ví dụ, bắt đầu bằng A. Vì đó là chữ hoa, nó sẽ được chuyển thành chữ thường trên dòng 3 và sau đó bạn sẽ quay lại dòng 1 cho ký tự tiếp theo.

Nếu bạn bắt đầu với z, if trên dòng 2 sẽ gửi bạn trực tiếp đến dòng 5, nơi nó sẽ được chuyển thành chữ hoa. Bất kỳ thứ gì không phải chữ hoa và chữ thường đều sẽ không bị lỗi cả hai câu hỏiif và do đó vẫn không bị ảnh hưởng.

3

Vấn đề là bạn đang cố gắng để thiết lập giá trị của SecondTextField sau khi kiểm tra tất cả các nhân vật duy nhất trong chuỗi gốc. Bạn nên thực hiện chuyển đổi "ở bên cạnh", một ký tự tại một thời điểm và chỉ sau đó đặt kết quả thành SecondTextField.

Khi bạn đi qua chuỗi gốc, bắt đầu soạn kết xuất từ ​​một chuỗi rỗng. Tiếp tục chắp thêm ký tự trong trường hợp ngược lại cho đến khi bạn hết ký tự. Khi đầu ra đã sẵn sàng, hãy đặt nó thành SecondTextField.

Bạn có thể tạo một đầu ra String, đặt nó thành một chuỗi trống "" và thêm các ký tự vào nó khi bạn di chuyển. Điều này sẽ làm việc, nhưng đó là một cách tiếp cận không hiệu quả. Một cách tiếp cận tốt hơn sẽ được sử dụng một lớp StringBuilder, cho phép bạn thay đổi chuỗi mà không cần ném đi toàn bộ điều.

4

Bạn có thể sử dụng StringUtils.swapCase() từ org.apache.commons

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

Vui lòng không chỉ cần đăng mã. Cung cấp một số lời giải thích hoặc thông tin hoặc cách sử dụng về mã của bạn. Ví dụ: xem [câu trả lời này] (http://stackoverflow.com/a/16893057/756941). – NAZIK

4

Đây là một phương pháp tốt hơn: -

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

Xin chào Umarjon, về các câu trả lời trong tương lai, hãy thử thêm giải thích ngắn gọn về câu trả lời của bạn để giúp người dùng đăng câu hỏi để hiểu giải pháp của bạn và tìm hiểu từ số – Lupin

1

Ở đây bạn là một số phiên bản khác:

public class Palindrom {

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

Đây là một biến thể khác của giải pháp tương tự bằng giá trị 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

Trong khi đoạn mã này được chào đón và có thể cung cấp trợ giúp, [cải thiện rất nhiều nếu nó bao gồm một lời giải thích] (// meta.stackexchange.com/q/114762) của * how * và * why * điều này giải quyết vấn đề. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai, không chỉ là người hỏi ngay bây giờ! Vui lòng [sửa] câu trả lời của bạn để thêm giải thích và đưa ra chỉ dẫn về những giới hạn và giả định được áp dụng. –

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

Đây là một cách tiếp cận tốt hơn mà không cần sử dụng bất kỳ chức năng String.

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

Bạn có thể xây dựng câu trả lời của mình không? Đăng một đoạn mã mà không có bất kỳ văn bản nào thường không hữu ích. –

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); 
     } 
    } 
Các vấn đề liên quan