Java 如果字符串包含“0”,则返回true;xyz";没有一个周期?
我试图解决这个编码问题: 如果给定字符串包含“xyz”外观,其中xyz前面没有直接加句点(.),则返回true。所以“xxyz”算数,但“x.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;
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
我通过了所有的测试,有三个陈述。这里有一个提示:尝试使用stringreplace
方法。以下是方法签名:
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
简单的解决方案,只需更换并检查a中的“xyz”即可
def xyz_there(str):
a=str.replace('.xyz','')
return 'xyz' in a
在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