如何在Java中反转字符串的大小写?
我想更改一个字符串,使所有的大写字符变为小写,所有的小写字符变为大写。数字字符被忽略 所以“AbCdE123”变成了“AbCdE123”如何在Java中反转字符串的大小写?,java,string,case,case-sensitive,Java,String,Case,Case Sensitive,我想更改一个字符串,使所有的大写字符变为小写,所有的小写字符变为大写。数字字符被忽略 所以“AbCdE123”变成了“AbCdE123” 我想一定有一种方法可以遍历字符串并翻转每个字符,或者可能有某种正则表达式可以做到这一点。Apache Commons StringUtils有一种方法 我想一定有办法遍历字符串并翻转每个字符 对。该类在每个下为您提供了相应的isUpperCase()方法。对其进行测试,并根据结果使用toLowerCase()或toUpperCase()方法。将每个结果附加到一
我想一定有一种方法可以遍历字符串并翻转每个字符,或者可能有某种正则表达式可以做到这一点。Apache Commons StringUtils有一种方法 我想一定有办法遍历字符串并翻转每个字符
对。该类在每个下为您提供了相应的
isUpperCase()
方法。对其进行测试,并根据结果使用toLowerCase()
或toUpperCase()
方法。将每个结果附加到一个StringBuilder
,您应该会没事。我不相信有任何内置的东西可以做到这一点(这是相对不寻常的)。不过,这应该可以做到:
public static String reverseCase(String text)
{
char[] chars = text.toCharArray();
for (int i = 0; i < chars.length; i++)
{
char c = chars[i];
if (Character.isUpperCase(c))
{
chars[i] = Character.toLowerCase(c);
}
else if (Character.isLowerCase(c))
{
chars[i] = Character.toUpperCase(c);
}
}
return new String(chars);
}
publicstaticstringreversecase(字符串文本)
{
char[]chars=text.toCharArray();
for(int i=0;i
请注意,这不会改变String.toUpperCase/String.toLowerCase所做的特定于语言环境的更改。它也不处理非BMP字符。我确实意识到给定的线程非常旧,但有更好的解决方法:
class Toggle
{
public static void main()
{
String str = "This is a String";
String t = "";
for (int x = 0; x < str.length(); x++)
{
char c = str.charAt(x);
boolean check = Character.isUpperCase(c);
if (check == true)
t = t + Character.toLowerCase(c);
else
t = t + Character.toUpperCase(c);
}
System.out.println (t);
}
}
类切换
{
公共静态void main()
{
String str=“这是一个字符串”;
字符串t=“”;
对于(int x=0;x
我们也可以使用StringBuilder对象,因为它具有字符替换方法。但是,存储StringBuilder对象可能需要一些额外的空间。因此,如果空间无关紧要,并使解决方案简单易懂,这将有所帮助
String swapCase(String text) {
StringBuilder textSB = new StringBuilder(text);
for(int i = 0; i < text.length(); i++) {
if(text.charAt(i) > 64 && text.charAt(i) < 91)
textSB.setCharAt(i, (char)(text.charAt(i) + 32));
else if(text.charAt(i) > 96 && text.charAt(i) < 123)
textSB.setCharAt(i, (char)(text.charAt(i) - 32));
}
return textSB.toString();
}
String swapCase(字符串文本){
StringBuilder textSB=新的StringBuilder(文本);
对于(int i=0;i64&&text.charAt(i)<91)
textSB.setCharAt(i,(char)(text.charAt(i)+32));
else if(text.charAt(i)>96&&text.charAt(i)<123)
textSB.setCharAt(i,(char)(text.charAt(i)-32));
}
返回textSB.toString();
}
基于Faraz的方法,我认为字符转换可以简单到:
t += Character.isUpperCase(c) ? Character.toLowerCase(c) : Character.toUpperCase(c);
Java8及以上版本:
String myString = "MySampleString123";
System.out.println(myString.chars().map(c -> Character.isLetter(c) ? c ^ ' ' : c).collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString());
需要注意的是,与字母相反的代码:
Character.isLetter(c) ? c ^ ' ' : c
公共类反向实例{
公共静态void main(字符串[]args){
char[]char_arr=args[0]。toCharArray();
for(int i=0;i
我认为最简单的解决方案是:
publicstaticstringreversecase(字符串文本){
StringBuilder sb=新的StringBuilder();
for(char c:text.toCharArray())
sb.append(字符)是否大写?
字符.小写(c):
特征。toUpperCase(c));
使某人返回字符串();
}
我认为您可以更轻松地阅读这篇文章,StringBuilder有一个append(char)方法+Character.toUpperCase
和toLowerCase
都是静态方法。我只是觉得很遗憾,唯一的StringBuilder示例也包含了ascii索引算法
对于那些不喜欢三元表达式的人,这里有一个等价物:
publicstaticstringreversecase(字符串文本){
StringBuilder sb=新的StringBuilder();
for(char c:text.toCharArray())
if(字符.大写(c))
c=字符。toLowerCase(c);
其他的
c=字符。toUpperCase(c);
sb.附加(c);
使某人返回字符串();
}
编辑Java 8+(StringBuilder收集器代码取自@Arun的答案)
publicstaticstringreversecase(字符串文本){
返回text.chars()
.map(c->Character.isUpperCase(c)?
字符.小写(c):
字符(c))
.收集(
StringBuilder::新建,
StringBuilder::appendCodePoint,
StringBuilder::append)
.toString();
}
他们的StringUtils是处理字符串的最佳工具之一。向大型库中添加依赖项(仅针对一个复杂度非常有限的函数)是有争议的。同意依赖项,但是如果你环顾四周,你可能会发现Commons代码可以简化你的代码的其他地方。我还想补充一点,使用一种众所周知的经过大量测试和广泛使用的方法,比如Apache Commons,有很多优点。如果你自己实现它,你的基本算法可能没有什么问题,但是(除非你让Jon Skeet为你编写),你可能会因为一个或一些这样的错误而有一点偏差,直到以后才会出现。不需要附加到StringBuilder-你已经确切地知道输出会有多大,你可以在一个数组中就地执行。如果他以后不需要操作它,这确实是可行的。Jon:如果你遵守特定于语言环境的规则,更改字符串的大小写不一定能保持
public class ReverseCase {
public static void main(String[] args){
char[] char_arr = args[0].toCharArray();
for (int i = 0; i < char_arr.length; i++) {
if (Character.isLowerCase(char_arr[i])) {
char_arr[i] = Character.toUpperCase(char_arr[i]);
}else {
char_arr[i] = Character.toLowerCase(char_arr[i]);
}
}
String reversed = new String(char_arr);
System.out.println(reversed);
}
}