Java 检查字符串中的空白,不断抛出StackOverflower错误
所以我试图检查字符串是否有空格,并返回一个布尔值和结果 我尝试了几个正则表达式,也尝试了一个笨拙的字符比较,但我尝试的任何东西都会在setUsername()的第一行抛出StackOverflower错误 有人能告诉我我做错了什么吗Java 检查字符串中的空白,不断抛出StackOverflower错误,java,regex,Java,Regex,所以我试图检查字符串是否有空格,并返回一个布尔值和结果 我尝试了几个正则表达式,也尝试了一个笨拙的字符比较,但我尝试的任何东西都会在setUsername()的第一行抛出StackOverflower错误 有人能告诉我我做错了什么吗 public void setUsername(String username) { if (!this.hasSpaces(username) && username.length() >= 10) t
public void setUsername(String username) {
if (!this.hasSpaces(username) && username.length() >= 10)
this.setUsername(username);
else
this.setUsername("DefaultStaff");
}
public boolean hasSpaces(String str) {
// Pattern p = Pattern.compile("[\\W]");
// Matcher m = p.matcher(str);
// return m.matches();
char[] tmp = str.toCharArray();
for (int i = 0; i < tmp.length; i++)
if (tmp[i] == ' ')
return true;
return false;
}
public void setUsername(字符串用户名){
如果(!this.hasSpaces(username)&&username.length()>=10)
这个.setUsername(username);
其他的
此.setUsername(“DefaultStaff”);
}
公共布尔hasspace(字符串str){
//模式p=Pattern.compile(“[\\W]”);
//匹配器m=p.Matcher(str);
//返回m.matches();
char[]tmp=str.toCharArray();
for(int i=0;i
在setUsername
中的if语句的两个分支中调用setUsername
。这就是你的无限递归
您可能希望手动设置字段,而不是调用setUsername
,如下所示:
public void setUsername(String username) {
if (!this.hasSpaces(username) && username.length() >= 10)
this.username = username;
else
this.username = "DefaultStaff";
}
是的,就这样。他们分班上课,所以一开始我没听懂。谢谢你,伙计。@Ratu如果你得到一个
StackOverflowerError
,请查看堆栈跟踪中的重复模式;这是您的循环。setUsername(“ThisIsALongUserNameWithoutSpaces”)
将调用hassspaces()
,返回false
。而且username
超过10个字符,因此该方法使用相同的参数调用自身,这意味着它将调用hasSpaces()
,该参数返回false
。而且username
超过10个字符,因此该方法使用相同的参数调用自身,这意味着它将调用hasSpaces()
,该参数返回false
。而且username
长度超过10个字符,因此该方法使用相同的参数调用自己,这意味着。。。堆栈溢出错误。