目前我有
Pattern p = Pattern.compile("\s");
boolean invalidChar = p.matcher(text).find();
我希望它只有在我有一个以上的空格时才返回true。 此外,字符串的开头或结尾不应有任何空格。
因此一些有效/无效的文本将是
12 34 56 = valid
ab-34 56 = valid
ab 34 = invalid
12 34 53 = invalid
答案 0 :(得分:3)
试试这个:
(^\s{1,}|\s{2,}|\s$)
决赛:
Pattern p = Pattern.compile("(^\s{1,}|\s{2,}|\s$)");
答案 1 :(得分:3)
没有正则表达式..
public class Answ {
public static boolean isValid(String s) {
return !s.contains(" "); //two white spaces
}
public static void main(String[] args) {
String st1 = "12 34 56";
System.out.println(isValid(st1));
}
}
答案 2 :(得分:1)
由于字符串的开头和结尾不能有空格,并且里面不能有两个或多个连续的空格,你可以使用
boolean isValid = s.matches("\\S+(?:\\s\\S+)*");
此表达式将匹配以下内容:
^
(隐含在matches
中默认锚定匹配,即整个字符串必须与正则表达式匹配) - 字符串的开头\S+
- 除了空格之外的1个或多个字符(?:\s\S+)*
- 零个或多个序列:
\s
- 一个空白\S+
- 除了空格之外的1个或多个字符$
(隐含在matches
中) - 字符串的结尾。请参阅regex demo。
答案 3 :(得分:1)
您可以使用此模式:
Pattern p = Pattern.compile("(?<!\\S)(?!\\S)");
Matcher m = p.matcher(text);
boolean invalidChar = m.find();
或boolean isValid = !m.find()
,如您所愿。
(?<!\\S)
表示&#34;前面没有非空格&#34; (包括前面的空格或字符串的开头)和(?!\\S)
&#34;后面没有非空格&#34; (包括后面的空格或字符串的结尾)。
这两个外观描述了所有可能的情况:
答案 4 :(得分:0)
试试这个:
boolean invalidChar = text.matches("\\S(?!.*\\s\\s).*\\S");
说明:
\\S
- 匹配以非空格字符开头
(?!.*\\s\\s)
- 负向前瞻断言,以确保没有两个空白字符的实例彼此相邻
.*
- 匹配任何字符的0或更多
\\S
- 匹配以非空白字符结尾
注意:仅当正则表达式与整个matches("regex")
字符串匹配时,text
方法才返回true。