Java 如何在给定条件下返回由前2个字符组成的字符串

Java 如何在给定条件下返回由前2个字符组成的字符串,java,Java,我偶然发现了以下问题: 给定一个字符串,返回由前2个字符组成的字符串(如果存在),但仅当第一个字符为“o”时包含第一个字符,当第二个字符为“z”时包含第二个字符,因此“ozymandias”产生“oz” 下面是我的尝试,但请考虑到我是一个乞丐 public String startOz(String str) { if(str.length()>=2 && str.substring(0,2)=="oz") return "oz"; if(str.length

我偶然发现了以下问题:

给定一个字符串,返回由前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”,而是一个空格。。有办法挽救我的尝试吗?

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

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);)
然后把它们结合起来作为你的答案

你可以在这里检查代码

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

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);)
然后把它们结合起来作为你的答案

你可以在这里检查代码

我会将问题分解为您正在执行的两个
布尔测试(第一个是至少有一个字符,第一个是
o
,第二个是至少有两个字符,第二个是
z
)。我会使用
String.tocharray()
来简化这些字符的获取。然后可以测试这些布尔条件。像

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 "";
}

我会将问题分解为您正在执行的两个
布尔测试(第一个是至少一个字符,第一个是
o
,第二个是至少两个字符,第二个是
z
)。我会使用
String.tocharray()
来简化这些字符的获取。然后可以测试这些布尔条件。像

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 "";
}
你可以试试这个:

String result = "";
if(str != null && !str.isEmpty()){
    result = (str.indexOf("o") == 0 ? "o" : "").concat(str.indexOf("z") == 1 ? "z" : "");
}
return result;
你可以试试这个:

String result = "";
if(str != null && !str.isEmpty()){
    result = (str.indexOf("o") == 0 ? "o" : "").concat(str.indexOf("z") == 1 ? "z" : "");
}
return result;
公共字符串startOz(字符串str){
int len=str.length();//计算长度
if(len<1)返回新字符串(“”);
if(len>1&&str.charAt(0)='o'&&str.charAt(1)='z')返回新字符串(“oz”);//检查字符串长度是否大于2且以oz开头
if(str.charAt(0)='o')返回新字符串(“o”);//如果字符串以o开头
if(str.charAt(1)='z')返回新字符串(“z”);//如果该字符串的第二个字符为z
返回新字符串(“”;//不匹配
}
编辑:虽然上述解决方案已被接受,但只是略有改进,但如果输入str=“z”,则会出现问题,应避免出现“StringIndexOutOfBoundsException”。因此,请将第6行编辑为
如果(len>=1&&str.charAt(1)='z')
,那么它将是完美的。

公共字符串startOz(String str){
int len=str.length();//计算长度
if(len<1)返回新字符串(“”);
if(len>1&&str.charAt(0)='o'&&str.charAt(1)='z')返回新字符串(“oz”);//检查字符串长度是否大于2且以oz开头
if(str.charAt(0)='o')返回新字符串(“o”);//如果字符串以o开头
if(str.charAt(1)='z')返回新字符串(“z”);//如果该字符串的第二个字符为z
返回新字符串(“”;//不匹配
}
编辑:虽然上述解决方案已被接受,但只是略有改进,但如果输入str=“z”,则会出现问题,应避免出现“StringIndexOutOfBoundsException”。因此,请将第6行编辑为
,如果(len>=1&&str.charAt(1)='z')
,那么它将是完美的。

您可以试试这个 我对你的代码做了一些编辑,但最终还是成功了

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 "";
}
你可以试试这个 我对你的代码做了一些编辑,但最终还是成功了

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 "";
}

首先,不要将
字符串与
==
进行比较,使用
.equals()
str.substring(0,2).equals(“oz”)
哇,谢谢!它现在工作得很好。但是为什么“==”不适用于字符串?@Dahaka请给出更多的测试条件。我无法完全计算出预期的产出。请提供更多他们期望的信息output@Dahaka请阅读提议的重复问题。。它解释得很清楚detail@Dahaka代码模式是什么意思?像这个
?(如果是这样,请在要突出显示的部分前后使用`符号。`像这样',除了没有空格外)首先不要将
字符串
==
进行比较,使用
.equals()
str.substring(0,2).equals(“oz”)
哇,谢谢!它现在工作得很好。但是为什么“==”不适用于字符串?@Dahaka请给出更多的测试条件。我无法完全计算出预期的产出。请提供更多他们期望的信息output@Dahaka请阅读提议的重复问题。。它解释得很清楚detail@Dahaka代码模式是什么意思?像这个
?(如果是这样,请在要高亮显示的部分前后使用“符号”。“像这样”,除了没有空格外)这看起来很平滑。但是我不明白str和str有什么区别零和!str.empty()。其中一个还不够吗?没问题。如果
str
变量未初始化或未赋值,则该变量可以为
null
str
变量也可以是空字符串,或
”。请参见如何使用空字符串初始化
结果
”。这就是区别。我在那里检查了它们,因为它们是导致对问题的空字符串响应的条件;所以我们不必再做任何检查了。这看起来很顺利。但是我不明白str和str有什么区别零和!str.empty()。其中一个还不够吗?没问题。如果
str
变量未初始化或未赋值,则该变量可以为
null
str
变量也可以是空字符串,或
”。请参见如何使用空字符串初始化
结果
”。这就是区别。我都检查过了