簡體   English   中英

一個關於char不能轉換成java.lang.String的問題

[英]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;
}

回復評論。

  1. StringBuilder是構建String的正確方法,因為StringJava中是不可變的。 如果您是初學者,我將其刪除。
  2. <condition>? <true>: <false> <condition>? <true>: <false>稱為三元操作數 if 類似於if(<condition>) <true> else <false>;
  3. 最后我使用trim()從字符串的開頭和結尾刪除\0 A也將其刪除。

你可以看到我更新的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM