我想更改一个字符串,使所有大写字符变为小写,所有小写字符变为大写。数字字符被忽略。
所以“AbCdE123”变成了“aBcDe123”
我想一定有一种方法可以遍历字符串并翻转每个字符,或者可能是一些可以做到这一点的正则表达式。
我想更改一个字符串,使所有大写字符变为小写,所有小写字符变为大写。数字字符被忽略。
所以“AbCdE123”变成了“aBcDe123”
我想一定有一种方法可以遍历字符串并翻转每个字符,或者可能是一些可以做到这一点的正则表达式。
Apache Commons StringUtils 有一个swapCase方法。
我不相信有任何内置的东西可以做到这一点(这相对不寻常)。这应该这样做:
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);
}
请注意,这不会进行 String.toUpperCase/String.toLowerCase 所做的特定于语言环境的更改。它也不处理非 BMP 字符。
我想一定有一种方法可以遍历字符串并翻转每个字符
正确的。该类java.lang.Character
在每个isUpperCase()
方法下为您提供了该方法。对其进行测试并根据结果使用toLowerCase()
ortoUpperCase()
方法。将每个结果附加到 a StringBuilder
,你应该没问题。
基于 Faraz 的方法,我认为字符转换可以很简单:
t += Character.isUpperCase(c) ? Character.toLowerCase(c) : Character.toUpperCase(c);
Java 8 及更高版本:
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
我认为最简单的解决方案是这样的:
public static String reverseCase(String text) {
StringBuilder sb = new StringBuilder();
for (char c : text.toCharArray())
sb.append(Character.isUpperCase(c) ?
Character.toLowerCase(c) :
Character.toUpperCase(c));
return sb.toString();
}
我认为您可以更轻松地阅读此内容,并且 StringBuilder 无论如何都有一个 append(char) 方法 +Character.toUpperCase
并且toLowerCase
都只是静态方法。我只是对唯一的 StringBuilder 示例也包含 ascii 索引算法感到难过。
对于那些不喜欢三元表达式的人,这里是等价的:
public static String reverseCase(String text) {
StringBuilder sb = new StringBuilder();
for (char c : text.toCharArray())
if (Character.isUpperCase(c))
c = Character.toLowerCase(c);
else
c = Character.toUpperCase(c);
sb.append(c);
return sb.toString();
}
编辑 Java 8+(取自 @Arun 的答案的 StringBuilder 收集器代码)
public static String reverseCase(String text) {
return text.chars()
.map(c -> Character.isUpperCase(c) ?
Character.toLowerCase(c) :
Character.toUpperCase(c))
.collect(
StringBuilder::new,
StringBuilder::appendCodePoint,
StringBuilder::append)
.toString();
}
我们还可以使用 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();
}
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);
}
}
我确实意识到给定的线程很旧,但是有更好的解决方法:
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);
}
}