1

我偶然发现了以下问题:

给定一个字符串,返回一个由前 2 个字符组成的字符串(如果存在),但是只有当它是 'o' 时才包含第一个字符,并且只有当它是 'z' 时才包含第二个字符,所以 "ozymandias" 产生 "oz"。

贝娄是我的尝试,但请考虑到我是一个初学者。

public String startOz(String str) {
 if(str.length()>=2 && str.substring(0,2)=="oz")
     return "oz";
 if(str.length()>=1 && str.substring(0,1)=="o")
     return "o";
 if(str.length()>=2 && str.substring(1,2)=="z")
     return "z";
   return "";
}   

不幸的是,这段代码没有包含所有的可能性,也许通过一个例子可以更好地理解,如果输入是: startOz("ozk") 那么输出将不是 "oz",而是一个空格。. 有没有如何挽救我的尝试?

4

5 回答 5

3

您可以检查字符的位置,看看它们是否正确。像这样

String str = ("ozymondiaz");    
String returnString = ("");
if(str.length()>1 && str.charAt(0) == 'o') { returnString+=("o"); } 
if(str.length()>2 && str.charAt(1) == 'z') { returnString+=("z"); } 
    System.out.print(returnString);)

然后将它们结合起来作为您的答案。

你可以在这里查看代码 http://tpcg.io/qdubRQ

于 2018-12-20T00:15:50.447 回答
2
public String startOz(String str) {
  int len = str.length(); // calculating length
  if(len < 1) return new String("");
  if(len > 1 && str.charAt(0) == 'o' && str.charAt(1) == 'z') return new String("oz");  // checking if the string length is more than 2 and it starts with oz
  if(str.charAt(0) == 'o') return new String("o"); // if the string starts with o
  if(str.charAt(1) == 'z') return new String("z"); // if the string has 2nd char as z
  return new String(""); // nothing matched
}

编辑:只是略有改进,虽然上述解决方案已被接受,但如果输入 str = "z" 则会出现问题,那么它会给出 "StringIndexOutOfBoundsException" ,这应该避免。所以请编辑第 6 行,if(len >= 1 && str.charAt(1) == 'z')这样就完美了。

于 2018-12-20T00:28:49.137 回答
1

我会将问题分解为boolean您正在执行的两个测试(第一个是至少有一个字符并且是第一个字符o,第二个是至少有两个字符,第二个是z)。我会String.toCharArray()用来让这些角色更容易。然后您可以测试这些布尔条件。喜欢,

public String startOz(String str) {
    if (str != null) {
        char[] arr = str.toLowerCase().toCharArray();
        boolean oTest = arr.length >= 1 && arr[0] == 'o';
        boolean zTest = arr.length >= 2 && arr[1] == 'z';
        if (oTest && zTest) {
            return "oz";
        } else if (oTest) {
            return "o";
        } else if (zTest) {
            return "z";
        }
    }
    return "";
}
于 2018-12-20T00:20:14.633 回答
1

你可以试试这个:

String result = "";
if(str != null && !str.isEmpty()){
    result = (str.indexOf("o") == 0 ? "o" : "").concat(str.indexOf("z") == 1 ? "z" : "");
}
return result;
于 2018-12-20T00:21:16.273 回答
1

你可以试试这个我对你的代码做了一些编辑,但终于让它工作了

public static String startOz(String str) {
    if(str.length()>=2 && str.substring(0,2).equals("oz"))
    {
        return "oz";
    }
    else if(str.length()>=2 && str.substring(1,2).equals("z"))
    {
        return "z";
    }
    else if (str.length()>=2 && str.substring(0,1).equals("o"))
    {
        return "o";
    }
    return "";
}
于 2018-12-20T00:29:18.913 回答