我遇到过这个问题,而不是如何解决它。
完成以下方法以确定参数是否仅包含以下小写字符:d,r,m,f,s,1,t。如果是,则返回true;否则,返回false
如果参数为subject { described_class.token }
或为空字符串,则还返回null
。
true
我尝试过以下操作,但失败了:
public boolean isSonqStrinq(Strinq s){
谁能告诉我哪里出错了?
答案 0 :(得分:1)
您每次都要比较第一个字符,您需要在while循环中移动char a = s.charAt(i);
。
另外,你可以在这里使用for循环,删除j计数器,并缩短return语句,如下所示:
public boolean isSongString (String s){
if(s == null) return true;
char[] allowedChars = new char[] {'d','r','m','f','s','l','t'};
for(int i=0; i < s.length(); i++) {
if(Arrays.asList(allowedChars).contains(s.charAt(i)))
continue;
else
return false;
}
return true;
}
编辑:
JoD。的答案是最好的,它允许将解决方案简化为单一声明:
public boolean isSongString (String s){
return ((s == null) ||
(s.matches("^[drmfslt]*$")));
}
答案 1 :(得分:1)
因为这是一项练习,我认为最好只提供一些好的线索。发现的乐趣比全力扰流更好。
while (i < s.length())
内,条件始终为真,您的while
循环将永久运行。char a = s.charAt(i)
只执行一次,并且在整个程序执行期间只包含字符串的第二个字符。String
有一个特别有趣的方法。剧透警告:"^[drmfslt]*$"
- 不,不是我用另一种语言骂你:-D 答案 2 :(得分:0)
你应该将我初始化为0和a到&#39; &#39;并且在第一个陈述应该是
public void saveCollege() {
Student student1= new Student();
student1.setStudentName("Student1");
ArrayList<Student> list= new ArrayList<Student>();
list.add(student1);
College college1= new College();
college1.setCollegeName("College3");
college1.setCollegeId(1);
college1.setStudents(list);
getEntityManager().merge(college1);
}
这应该可以正常工作。如果没有,你可以回复。
答案 3 :(得分:0)
public boolean isSongString (String s){
int i = 0;
int j = 0;
while (i < s.length()-1){
char a = s.charAt(i);
if(a == 'd' | a == 'r' | a == 'm' | a == 'f' | a == 's' | a == 'l' | a == 't')
j++;
else
break;
i++;
}
if (j == s.length())
return true;
else
return false;
}
答案 4 :(得分:0)
试试这个:
-z
输出: 假 真正 真正 真