Java 如果字符串包含“0”,则返回true;xyz";没有一个周期?

Java 如果字符串包含“0”,则返回true;xyz";没有一个周期?,java,string,Java,String,我试图解决这个编码问题: 如果给定字符串包含“xyz”外观,其中xyz前面没有直接加句点(.),则返回true。所以“xxyz”算数,但“x.xyz”不算数 我的尝试: public boolean xyzThere(String str) { boolean res = false; if(str.contains(".xyz") == false && str.contains("xyz")){ res = true; } return res;

我试图解决这个编码问题:

如果给定字符串包含“xyz”外观,其中xyz前面没有直接加句点(.),则返回true。所以“xxyz”算数,但“x.xyz”不算数

我的尝试:

public boolean xyzThere(String str) {
  boolean res = false;

  if(str.contains(".xyz") == false && str.contains("xyz")){
    res = true;
  }

  return res;

}
问题在于,is通过了除以下测试之外的所有测试,因为它包含两个xyz实例:

xyzThere("abc.xyzxyz")
我怎样才能使它通过所有测试

public static boolean xyzThere(String str) {
    int i = -1;
    while ((i = str.indexOf("xyz", i + 1 )) != -1) {
        if (i == 0 || (str.charAt(i-1) != '.')) {
            return true;
        }
    }
    return false;
}
编辑:假设“.xyzxyz”应返回true,则解决方案应为:

public boolean xyzThere(String str) {
    int index = str.indexOf(".xyz");
    if(index >= 0) {
        return xyzThere(str.substring(0, index)) || xyzThere(str.substring(index + 4));
    } else return (str.contains("xyz"));
}

好的,让我们将您的问题转换为regexp:

^
从字符串开头开始
(|.[^\.])
后跟任何字符或任何数量的字符,以及除
以外的任何字符
xyz
然后是xyz

Java代码:

public static boolean xyzThere(String str) {
    return str.matches("^(|.*[^\\.])xyz");
}

好的,我知道每个人都渴望分享他们的专业知识,但是直接给孩子答案没有什么好处

@热心人士x94

我通过了所有的测试,有三个陈述。这里有一个提示:尝试使用string
replace
方法。以下是方法签名:

String replace(CharSequence target, CharSequence replacement)
请注意,if语句中的第一个条件可以简化为:

str.contains(".xyz") == false
致:

包含
方法已返回true或false,因此不需要显式的equals比较。

布尔标志=false;
public boolean xyzThere(String str) {
return str.startsWith("xyz") || str.matches(".*[^.]xyz.*");
}

如果(str.length()或者,您可以将字符串中出现的所有“.xyz”替换为“”,然后使用.contains方法验证修改后的字符串是否仍然包含“xyz”。如下所示:

return str.replace(".xyz", "").contains("xyz");
public boolean xyzThere(String str){
布尔res=false;
if(str.length()3){
对于(int i=0;i
公共类XyzThereDemo{
公共静态void main(字符串[]args){
System.out.println(xyzThere(“abcxyz”);
System.out.println(xyzThere(“abc.xyz”);
System.out.println(xyzThere(“xyz.abc”);
}
公共静态布尔值xyzThere(字符串str){
int xyz=0;
对于(int i=0;i

在python中,以下代码起作用:

def xyz_there(str):
 if len(str) < 3:
  return False
 for i in range(len(str)):
  if str[i-1]!= '.':
   if str[i:i+3]=='xyz' :
    return True
 else:
  return False
def xyz_(str):
如果len(str)<3:
返回错误
对于范围内的i(len(str)):
如果str[i-1]!='。:
如果str[i:i+3]=='xyz':
返回真值
其他:
返回错误
另一种方法

public boolean xyzThere(String str) {
 if(str.startsWith("xyz")) return true;
for(int i=0;i<str.length()-3;i++) {
   if(str.substring(i+1,i+4).equals("xyz") && str.charAt(i)!='.') return true;
}
  return false;
}
public boolean xyzThere(String str){
如果(str.startsWith(“xyz”))返回true;

对于(int i=0;i,您可以将等效的java代码用于以下解决方案:

def xyz_there(str):
  pres = str.count('xyz')
  abs = str.count('.xyz')
  if pres>abs:
    return True
  else:
    return False
''蟒蛇

'''

公共布尔值xyzThere(字符串str){
如果(str.startsWith(“xyz”)){
返回true;
}
对于(int i=0;i
这是用非常简单的逻辑解决这个问题的最好、最简单的方法:

def xyz_there(str):
  for i in range(len(str)):
    if str[i-1]!= '.' and str[i:i+3]=='xyz' :
      return True
  return False
public boolean xyzThere(String str){
布尔标志=假;
如果(str.startsWith(“xyz”))
{
返回true;
}
对于(int i=0;i
为什么要对
循环使用
,而完全忽略
i
?对于字符串中的每个字符,您都在重复同样的事情。那么
xyzhere(“abc.xyzxyz”)应该是什么呢
return?您提到的测试用例的结果应该是什么?是否通过?根据您的哲学倾向,回答
xyzThere(“abc.xyzxyz”)
可以是
true
false
,除非问题说明是否只检查第一次出现的
xyz
/'.xyz'。此外,使用
!str.contains(.xyz')==false
,而不是
str.contains(.xyz”)
。然后,为
循环删除
。我的坏朋友,试图以其他方式执行,忘记删除该行。@nommyravian,它应该返回'true',但在我的情况下返回false。不,问题是您的代码返回与我相同的输出,即为xyzThere(“abc.xyzxyz”)返回false,但是,它应该返回true。啊,明白了。我将相应地编辑我的答案。新答案将删除“.xyz”的所有实例,然后返回true。如果字符串仍然包含“xyz”,请重试,我已将“str.substring(index)”更改为“str.substring(index+4)”这应该可以消除堆栈溢出如果你有regexp锤子,每个问题看起来都像钉子。除了为什么不使用反向查找?
“(?也可能,但不是必需的。但可能更好(解释)。这并没有提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。-这确实运行了所有测试用例。在评论之前进行测试,并进行无知的向下投票。此解决方案未通过用户的前3项测试。您是否可以对您的cod进行任何澄清或解释e?接近循环结束时,
[i:i+3]
将超出范围
public class XyzThereDemo {
    public static void main(String[] args) {
        System.out.println(xyzThere("abcxyz"));
        System.out.println(xyzThere("abc.xyz"));
        System.out.println(xyzThere("xyz.abc"));
    }

    public static boolean xyzThere(String str) {
        int xyz = 0;
        for (int i = 0; i < str.length() - 2; i++) {


            if (str.charAt(i) == '.') {
                i++;
                continue;

            }

            String sub = str.substring(i, i + 3);


            if (sub.equals("xyz")) {
                xyz++;
            }


        }

        return xyz != 0;
    }
}
def xyz_there(str):
   a=str.replace('.xyz','')
   return 'xyz' in a
def xyz_there(str):
 if len(str) < 3:
  return False
 for i in range(len(str)):
  if str[i-1]!= '.':
   if str[i:i+3]=='xyz' :
    return True
 else:
  return False
public boolean xyzThere(String str) {
 if(str.startsWith("xyz")) return true;
for(int i=0;i<str.length()-3;i++) {
   if(str.substring(i+1,i+4).equals("xyz") && str.charAt(i)!='.') return true;
}
  return false;
}
def xyz_there(str):
  pres = str.count('xyz')
  abs = str.count('.xyz')
  if pres>abs:
    return True
  else:
    return False
def xyz_there(str):

    dot=str.find('.')    # if period is present in str if not dot==-1
    if dot==-1:            # if yes dot will show position of period  
        return 'xyz' in str
    elif dot!=-1:                 #if period is present at position dot
        if 'xyz' in str[:dot]:    
            return True                    
        while str[dot+1:].find('.')!=-1:   #while another period is present 
            if  '.xyz' in str[dot+1:]==False:  # .xyz will not be counted  
                return True
        else:
            dot=dot+str[dot+1:].find('.')+2 #now dot=previous dot+new dot+2
    else:
        return 'xyz' in str[dot+2:]
def xyz_there(str):
  list = [i for i in range(len(str)) if str.startswith('xyz', i)]
  if list == []:
    return False
  else:
    found = 0
    for l in list:
      if str[l-1:l+3] != ".xyz":
        found += 1
    if found >=1:
      return True
    else:
      return False
public boolean xyzThere(String str) {

    if (str.startsWith("xyz")){
      return true;
    }

    for (int i = 0; i < str.length()-2; i++) {

        if (str.subSequence(i, i + 3).equals("xyz") && !(str.charAt(i-1) == '.')) {
            return true;
        }
    }
    return false;
}
def xyz_there(str):
  for i in range(len(str)):
    if str[i-1]!= '.' and str[i:i+3]=='xyz' :
      return True
  return False
 public boolean xyzThere(String str) {

    boolean flag = false;
    
    if (str.startsWith("xyz"))
    {
        return true;
    }

    for (int i = 0; i < str.length() - 3; i++)
    {
                                         
        if (str.charAt(i) != '.' && str.charAt(i + 1) == 'x'
            && str.charAt(i + 2) == 'y' && str.charAt(i + 3) == 'z')
        {
          flag = true;
          break;
        }
    }
    return  flag;
}
def xyz_there(str1):
  
  for i in range(len(str1)):
    if str1[i-1] != '.' and str1[i:i+3] == 'xyz':
      return True
  else:
    return False