[英]A question about char cannot be converted to java.lang.String
我正在做一個練習題:
給定一個字符串,返回一個由前 2 個字符組成的字符串(如果存在),但是,僅當第一個字符為 'o' 時才包含第一個字符,僅當它為 'z' 時才包含第二個字符,因此 "ozymandias" 產生 "oz ”。
startOz("ozymandias") → "oz"
startOz("bzoo") → "z"
startOz("oxx") → "o"
下面是我的解決方案,但我不知道為什么它顯示“不兼容的類型:char 無法轉換為 java.lang.String”。 我想知道是否有人可以幫助我編寫代碼。 太感謝了!
public String startOz(String str) {
if (str.length()==1 && str.charAt(0)=='o'){
return 'o';
}
if (str.length()<1){
return "";
}
if (str.length()>=2 && str.charAt(0) =='o' && str.charAt(1) !='z'){
return 'o';
}
if (str.length()>=2 && str.charAt(0) !='o' && str.charAt(1) =='z'){
return 'z';
}
if (str.length()>=2 && str.charAt(0) =='o' && str.charAt(1) =='z'){
return "oz";
} else {
return "";
}
}
當您在單引號中鍵入字符串時,它會告訴編譯器將后面的任何內容視為單個字符。 雙引號表示一個字符串。 function 在期待字符串時無法返回字符。
public String startOz(String str) {
if (str.length()==1 && str.charAt(0)=='o'){
return "o";
}
if (str.length()<1){
return "";
}
if (str.length()>=2 && str.charAt(0) =='o' && str.charAt(1) !='z'){
return "o";
}
if (str.length()>=2 && str.charAt(0) !='o' && str.charAt(1) =='z'){
return "z";
}
if (str.length()>=2 && str.charAt(0) =='o' && str.charAt(1) =='z'){
return "oz";
} else {
return "";
}
}
Rainmaker 等人是正確的:問題是您的方法應該返回一個字符串(一個 Java 對象),而不是一個字符(一個 Java 原語)。 編譯錯誤的一個很好的解決方案是返回“o”(雙引號)。
但也許你會發現這是一個更簡單的解決方案:
public static boolean isNullOrEmpty(String s) {
return s == null || s.isEmpty();
}
public String startOz(String str) {
if (isNullOrEmpty(str)) {
return "";
} else if (str.startsWith("oz") {
return "oz";
} else if (str.charAt(0) == 'o') {
return "o";
} else if (str.charAt(1) == 'z') {
return "z";
} else {
return "";
}
您不能檢索char
而不是Stirng
。 請改用String.valueOf(ch)
。
順便說一句,做一個簡單的人。 你可以用更少的代碼做同樣的事情。
public static String startOz(String str) {
String res = "";
if (str != null) {
if (str.length() > 0 && str.charAt(0) == 'o')
res += 'o';
if (str.length() > 1 && str.charAt(1) == 'z')
res += 'z';
}
return res;
}
回復評論。
StringBuilder
是構建String
的正確方法,因為String
在Java
中是不可變的。 如果您是初學者,我將其刪除。<condition>? <true>: <false>
<condition>? <true>: <false>
稱為三元操作數。 if 類似於if(<condition>) <true> else <false>;
trim()
從字符串的開頭和結尾刪除\0
。 A也將其刪除。你可以看到我更新的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.