![](/img/trans.png)
[英]I am trying to convert a string from lower case to upper case and upper case to lower casee
[英]Trying To convert String to lower/upper case respectively
如果字符串是大寫的,我正在嘗試將其轉換為小寫,反之亦然。 該代碼未按預期工作。 知道我做錯了什么嗎?
public class LowerNadUpperCase {
public static void main(String[] args) {
String output = "Elmar DidOkLTWdeee";
System.out.println(toAlternativeString(output));
}
public static String toAlternativeString(String string) {
String output = "";
for(int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
if(Character.isLetter(c)){
if(Character.isLowerCase(c)){
output += Character.toUpperCase(c);
if(Character.isUpperCase(c)){
output += Character.toLowerCase(c);
} else{
output += c;
}
}
}
}
return output;
}
}
使用預定義方法轉換試試這個
static void convertOpposite(StringBuffer str)
{
int ln = str.length();
// Conversion using predefined methods
for (int i = 0; i < ln; i++) {
Character c = str.charAt(i);
if (Character.isLowerCase(c))
str.replace(i, i + 1,
Character.toUpperCase(c) + "");
else
str.replace(i, i + 1,
Character.toLowerCase(c) + "");
}
}
public static void main(String[] args)
{
StringBuffer str = new StringBuffer("asasDAaQWADa");
convertOpposite(str);
System.out.println(str);
}
不要采用額外的變量,它將通過替換字符進行轉換。
import java.util.*;
public class Main
{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String a=sc.nextLine();
String res="";
for(int i=0;i<a.length();i++){
if(Character.isLowerCase(a.charAt(i))){
res=res+Character.toUpperCase(a.charAt(i)));
}
else{
res=res+Character.toLowerCase(a.charAt(i)));
}
}
System.out.println(res);
}
}
所以,你的基本問題在於你的邏輯(我知道,很明顯)
if (Character.isLetter(c)) {
if (Character.isLowerCase(c)) {
output += Character.toUpperCase(c);
if (Character.isUpperCase(c)) {
output += Character.toLowerCase(c);
} else {
output += c;
}
}
}
c
不是字母...什么也不做c
是小寫,append 是大寫c
。 現在這是有趣的地方,如果c
是大寫字母,那不可能,因為我們知道它是小寫字母,append(原始) c
到 output... 再次這就是進行“案頭檢查”(即布置您的變量並手動檢查您的代碼並寫下正在發生的事情)非常強大的地方。
你可能想做的是更像是......
if (Character.isLetter(c)) {
if (Character.isLowerCase(c)) {
output += Character.toUpperCase(c);
} else if (Character.isUpperCase(c)) {
output += Character.toLowerCase(c);
}
} else {
output += c;
}
盡管您可能並不“真的”需要isLetter
檢查(我的意思是,大寫/小寫1
是什么 ♂️)。
這會讓你的方法看起來更像......
public static String toAlternativeString(String string) {
String output = "";
for (int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
if (Character.isLetter(c)) {
if (Character.isLowerCase(c)) {
output += Character.toUpperCase(c);
} else if (Character.isUpperCase(c)) {
output += Character.toLowerCase(c);
}
} else {
output += c;
}
}
return output;
}
現在,我知道,在任何人因為String
連接的糟糕性能而跳到我的喉嚨之前,但我真的不認為這是問題的重點
但以防萬一...
public static String toAlternativeString(String string) {
StringBuilder sb = new StringBuilder(string.length());
for (char c : string.toCharArray()) {
if (Character.isUpperCase(c)) {
sb.append(Character.toLowerCase(c));
} else {
sb.append(Character.toUpperCase(c));
}
}
return sb.toString();
}
如果您想在 Java 中進行String
連接, StringBuilder
“通常”是一個更好的解決方案,但是對於這個示例來說,這可能有些過頭了。
因此,采用類似Elmar DidOkLTWdeee 123456
的輸入,上述方法將 output eLMAR dIDoKltwDEEE 123456
闡述@Dawood ibn Kareem 的評論,您不需要嵌套循環,一個簡單的if-else
就可以做到。
if(Character.isLetter(c)){
if(Character.isLowerCase(c)){
output += Character.toUpperCase(c);
}
else {
output += Character.toLowerCase(c);
}
}
以下是使用stream API的方法。
import java.util.Objects;
public class LowerAndUpperCase {
public static void main(String[] args) {
String output = "Elmar DidOkLTWdeee";
System.out.println(toAlternativeString(output));
}
public static String toAlternativeString(String string) {
Objects.requireNonNull(string);
StringBuilder sb = string.chars()
.map(c -> Character.isLowerCase((char) c) ? Character.toUpperCase((char) c) : Character.isUpperCase((char) c) ? Character.toLowerCase((char) c) : (char) c)
.collect(() -> new StringBuilder(),
(s, c) -> s.append((char) c),
(s1, s2) -> s1.append(s2));
return sb.toString();
}
}
isLetter
。IntStream
,因此轉換為char
。collect
方法中, s
和s1
和s2
的類型是StringBuilder
。這是我運行上面代碼時的 output。
eLMAR dIDoKltwDEEE
請注意,保留原始字符串中的空格(因為空格字符既不是大寫也不是小寫)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.