2

我有我的代码将外壳从上切换到下,反之亦然。我也有它可以切换上到下,从下到上。我的问题是;有没有办法让它也包括逗号或句号等字符。例如,如果我输入字符串“Hello, there”。我会得到:“你好,那里。”,“你好,那里”和“你好”。我怎样才能让它到达我的第三个输出会说“你好,那里”的地方。

import java.util.*;
public class UpperLower2
{

    public static void main(String[] args)
    {
        System.out.println("Enter in a sentence:"); 
        Scanner input = new Scanner(System.in); 
        String sentence = input.nextLine();


        System.out.println("All uppercase:" + sentence.toUpperCase());
        System.out.println("All lowercase:" + sentence.toLowerCase()); 
        System.out.println("Converted String:" + toggleString(sentence)); 
        input.close(); 
     }

    public static String toggleString(String sentence)
    {
       String toggled = ""; 
       for(int i=0; i<sentence.length(); i++)
       {


           char letter = sentence.charAt(i); 

           if(Character.isUpperCase(sentence.charAt(i)))
           {
                letter = Character.toLowerCase(letter); 
                toggled = toggled + letter; 

           }
           else if(Character.isLowerCase(sentence.charAt(i)))
           {
               letter = Character.toUpperCase(letter);
               toggled = toggled + letter; 
           }

       }
       return toggled; 

   }

}

4

7 回答 7

8

如果一个字符既不是大写也不是小写,你应该照原样处理。另外,不要使用 aString来累积输出 - 这就是StringBuilders 的用途:

public static String toggleString(String sentence) {
    StringBuilder toggled = new StringBuilder(sentence.length());
    for (char letter : sentence.toCharArray()) {
        if(Character.isUpperCase(letter)) {
            letter = Character.toLowerCase(letter);
        } else if(Character.isLowerCase(letter)) {
            letter = Character.toUpperCase(letter);
        }

        toggled.append(letter);

    }
    return toggled.toString();
}

编辑:
Java 8 语义中的类似实现,无需自己循环字符串:

public static String toggleStringJava8(String sentence) {
    return sentence.chars().mapToObj(c -> {
        if (Character.isUpperCase(c)) {
            c = Character.toLowerCase(c);
        } else if (Character.isLowerCase(c)) {
            c = Character.toUpperCase(c);
        }
        return String.valueOf((char)c);
    }).collect(Collectors.joining());
}
于 2015-07-05T04:54:14.910 回答
1

使用 Apache commons lang API StringUtils 类。UpperCase/LowCase/SwapCase/Capitalize/Uncapitalize - 更改字符串的大小写

要切换案例,请使用

交换案例(字符串字符串)

交换字符串的大小写,将大写和标题大小写更改为小写,将小写更改为大写。

此外,您无需编写任何代码来处理 ' 或 . 或任何其他此类字符。String Util 将完成这一切..

例子:

        String inputString = "Hello, there";
        
        System.out.println(StringUtils.swapCase(inputString));
        System.out.println(StringUtils.upperCase(inputString));
        System.out.println(StringUtils.lowerCase(inputString));

输出:
你好,那里你好

那里你好,那里

于 2015-07-05T04:52:39.633 回答
1

鉴于您发布的源代码,您现在有一个带有两个分支的 if 语句:一个用于字符大写的情况,一个用于字符小写的情况。逗号和其他标点符号等字符没有大写或小写,因此您的 if 语句和 else 块将忽略它们。

要解决此问题,else请在语句中添加另一个块:

else {
    toggled = toggled + letter; 
}

在你完成这项工作之后,你应该考虑让你的代码更干净。

toggled = toggled + letter;现在,您的代码中有 3 次该语句;您可以将其更改为一次:

       char letter = sentence.charAt(i); 

       if(Character.isUpperCase(sentence.charAt(i)))
       {
            letter = Character.toLowerCase(letter); 
       }
       else if(Character.isLowerCase(sentence.charAt(i)))
       {
           letter = Character.toUpperCase(letter);
       }
       // else {
       // }
       // You can remove the latest `else` branch now, because it is empty.

       toggled = toggled + letter; 

此外,在 Java 中构建字符串的首选方法是使用StringBuilder而不是字符串上的+运算符。如果你在 StackOverflow 上搜索,StringBuilder你会得到很多关于如何使用它的例子。

于 2015-07-05T04:56:32.847 回答
0

我们可以简单地将传入的字符串转换为 char[],然后单独切换它们。为我工作!!!

import java.util.Scanner;
@SuppressWarnings("unused")
public class One {
public static void main(String[] args) {
System.out.println("Enter a Word with toggled alphabets");  
Scanner sc=new Scanner(System.in);

String line =sc.nextLine();
char[] arr= line.toCharArray();

for(char ch: arr)
  {
if(Character.isUpperCase(ch)){
ch= Character.toLowerCase(ch);
}
else if(Character.isLowerCase(ch)){
    ch= Character.toUpperCase(ch);
}
System.out.print(ch);
}}} 
于 2017-01-23T21:50:43.953 回答
0

你可以用 Java 8 中的一行代码来做到这一点:

String newText = text.chars() .mapToObj(ch -> Character.isLowerCase(ch) ? String.valueOf(Character.toUpperCase((char)ch)) : String.valueOf(Character.toLowerCase((char)ch))) .collect(Collectors.joining());

于 2017-02-14T04:12:43.320 回答
0

我们可以通过将字符串的所有字符与所有大写和小写字母进行比较来做到这一点。如果字符与大写字母匹配,则将其替换为相应的小写字母,反之亦然。

import java.util.Scanner;
class TestClass {
    public static void main(String args[] ) throws Exception {
        Scanner scan = new Scanner(System.in);
        String S = scan.next();
        char []a ={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
        char []b ={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        char [] ch = S.toCharArray();
        for(int i=0;i<ch.length;i++){
           for(int j=0;j<a.length;j++){
               if(ch[i]==a[j]){
                   ch[i]=b[j];
               }
               else if(ch[i]==b[j]){
                   ch[i]=a[j];
               }
           }
        }
        String text = new String(ch);
        System.out.println(text);
    }
}
于 2017-07-11T05:56:33.360 回答
0

使用位操作:

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        Scanner scan= new Scanner(System.in);
        String s= scan.next();
        for(int i=0;i<s.length();i++){
            System.out.print((char)(s.charAt(i)^32));
        }
    }
}
于 2020-01-18T07:39:17.433 回答