Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查字符串中的空白,不断抛出StackOverflower错误_Java_Regex - Fatal编程技术网

Java 检查字符串中的空白,不断抛出StackOverflower错误

Java 检查字符串中的空白,不断抛出StackOverflower错误,java,regex,Java,Regex,所以我试图检查字符串是否有空格,并返回一个布尔值和结果 我尝试了几个正则表达式,也尝试了一个笨拙的字符比较,但我尝试的任何东西都会在setUsername()的第一行抛出StackOverflower错误 有人能告诉我我做错了什么吗 public void setUsername(String username) { if (!this.hasSpaces(username) && username.length() >= 10) t

所以我试图检查字符串是否有空格,并返回一个布尔值和结果

我尝试了几个正则表达式,也尝试了一个笨拙的字符比较,但我尝试的任何东西都会在setUsername()的第一行抛出StackOverflower错误

有人能告诉我我做错了什么吗

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个字符,因此该方法使用相同的参数调用自己,这意味着。。。堆栈溢出错误。