有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (5) 个答案

  1. # 1 楼答案

    我想问题是有一个?在否定空格之前,这意味着它是可选的

    这应该是有效的:

    [a-zA-Z]{1}([a-zA-Z\s]*[a-zA-Z]{1})?
    

    至少有一个字母序列,然后是带空格的可选字符串,但始终以字母结尾

  2. # 2 楼答案

    对我来说,唯一合乎逻辑的方法是:

    ^\p{L}+(?: \p{L}+)*$
    

    字符串的开头必须至少有一个字母。(我用字母\p{L}的Unicode代码属性替换了[a-zA-Z])。然后可以有一个空格后跟至少一个字母,这部分可以重复

    \p{L}:任何语言的任何种类的信件。见regular-expressions.info

    表达式^(?!\s*$)中的问题是,如果在字符串末尾只有空格,则前瞻将失败。如果不允许前导空格,只需删除lookahead==>;中的字符串结尾锚定符即可^(?!\s)[-a-zA-Z ]*$。但这仍然允许字符串以空格结尾。要避免这种情况,请回顾字符串^(?!\s)[-a-zA-Z ]*(?<!\s)$的末尾。但我认为这项任务不需要四处看看

  3. # 3 楼答案

    如果将其与String.matches方法一起使用,则应该可以使用。我猜你想要英文字母表

    "[a-zA-Z]+(\\s+[a-zA-Z]+)*"
    

    注意\s将允许所有类型的空白字符。在Java中,它相当于

    [ \t\n\x0B\f\r]
    

    其中包括水平制表符(09)、换行符(10)、回车符(13)、换行符(12)、退格符(08)、空格符(32)

    如果您希望只允许空间(32):

    "[a-zA-Z]+( +[a-zA-Z]+)*"
    

    您可以通过使捕获( +[a-zA-Z]+)不捕获(使用String.matches您将无法单独获取单词)来进一步优化上面的正则表达式。也可以更改量词,使其具有所有格,因为这里没有回溯的意义

    "[a-zA-Z]++(?: ++[a-zA-Z]++)*+"
    
  4. # 4 楼答案

    我不知道你接受的字符串中的单词是否可以用多个空格分隔。如果可以:

    ^[a-zA-Z]+(( )+[a-zA-z]+)*$
    

    如果不能:

    ^[a-zA-Z]+( [a-zA-z]+)*$
    

    字符串必须以字母(或几个字母)开头,而不是空格

    字符串可以包含几个单词,但第一个旁边的每个单词前面都必须有空格

    希望我能帮忙