我正在尝试解决这个CodingBat问题:
如果给定的字符串包含“xyz”的外观,则返回true,其中xyz不直接以句点(。)开头。所以“xxyz”计算但“x.xyz”没有。
xyzThere("abcxyz") → true
xyzThere("abc.xyz") → false
xyzThere("xyz.abc") → true
我的尝试:
public boolean xyzThere(String str) {
boolean res = false;
if(str.contains(".xyz") == false && str.contains("xyz")){
res = true;
}
return res;
}
问题是,除了下面的测试之外,它通过了所有测试,因为它包含两个xyz实例:
xyzThere("abc.xyzxyz")
如何让它通过所有测试?
答案 0 :(得分:4)
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;
}
答案 1 :(得分:2)
public boolean xyzThere(String str) {
return(!str.contains(".xyz") && str.contains("xyz"));
}
编辑:鉴于“.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"));
}
答案 2 :(得分:1)
好的,我知道每个人都渴望分享他们的专业知识,但直接给孩子答案没什么用。
@ EnTHuSiAsTx94
我能够通过三个语句传递所有测试。这是一个提示:尝试使用字符串replace
方法。这是方法签名:
String replace(CharSequence target, CharSequence replacement)
在次要说明中,if语句中的第一个条件可以简化为:
str.contains(".xyz") == false
为:
!str.contains(".xyz")
contains
方法已经返回true或false,因此不需要显式的equals比较。
答案 3 :(得分:1)
public boolean xyzThere(String str) {
return str.startsWith("xyz") || str.matches(".*[^.]xyz.*");
}
答案 4 :(得分:1)
或者,您可以替换所有出现的" .xyz"在带有""的字符串中,然后使用.contains方法验证修改后的字符串是否仍包含" xyz"。像这样:
return str.replace(".xyz", "").contains("xyz");
答案 5 :(得分:0)
定义 xyz_there(str):
如果 str 中的“.xxyz”:
return'.xxyz' in str
如果'.'在字符串中:
a=str.replace(".xyz","")
return 'xyz' in a
如果'.'不在 str 中:
return 'xyz' in str
答案 6 :(得分:0)
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
答案 7 :(得分:0)
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;
}
答案 8 :(得分:0)
这是用非常简单的逻辑解决此问题的最佳方法和最简单方法:
Function
答案 9 :(得分:0)
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;
}
答案 10 :(得分:0)
您可以将等效的Java代码用于以下解决方案:
def xyz_there(str):
pres = str.count('xyz')
abs = str.count('.xyz')
if pres>abs:
return True
else:
return False
答案 11 :(得分:0)
另一种方法
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;
}
答案 12 :(得分:0)
在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
答案 13 :(得分:0)
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;
}
}
答案 14 :(得分:0)
我这样解决了:
public boolean xyzThere(String str) {
if (str.length()>=3 && str.substring(0,3).equals("xyz")) {
return true;
}
for (int x=0; x<str.length()-3; x++) {
if (str.substring(x+1,x+4).equals("xyz") && !str.substring(x,x+1).equals(".")) {
return true;
}
}
return false;
}
答案 15 :(得分:0)
public boolean xyzThere(String str) {
boolean res=false;
if(str.length()<3)res=false;
if(str.length()==3){
if(str.equals("xyz"))res=true;
else res=false;
}
if(str.length()>3){
for(int i=0;i<str.length()-2;i++){
if(str.charAt(i)=='x' && str.charAt(i+1)=='y' && str.charAt(i+2)=='z'){
if(i==0 || str.charAt(i-1)!='.')res=true;
}
}
}
return res;
}
答案 16 :(得分:0)
好的,让我们将您的问题翻译成正则表达式:
^
从字符串的开头
开始
(|.*[^\.])
后跟任何字符或任何数量的字符以及除.
之外的任何字符
xyz
然后是xyz
Java代码:
public static boolean xyzThere(String str) {
return str.matches("^(|.*[^\\.])xyz");
}
答案 17 :(得分:-1)
''''python
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:]
'''
答案 18 :(得分:-1)
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
答案 19 :(得分:-1)
简单的解决方案,只需替换并在多数民众赞成中检查“ xyz”
def xyz_there(str):
a=str.replace('.xyz','')
return 'xyz' in a