Java Check字符串只有一些单词和字符

时间:2014-01-13 14:26:26

标签: java regex

我正在尝试验证String只包含某些单词和字符。

我将收到一个字符串,需要检查它是否只包含以下内容:

  • “(”
  • “)”
  • “AND”注意空格
  • “或”注意空格
  • 任何整数。如果我可以同时检查它是否小于10,那将是一个奖励,但如果它使代码复杂化,我可以单独执行此操作。

如果字符串中有任何其他字符或单词,我需要拒绝它。

有效的字符串是: (1或((2和3)或4和5))

我认为正则表达式是解决这个问题的方法,但我无法弄清楚如何构建正则表达式来做到这一点。

我知道正则表达式是:

  • \(
  • \)
  • \ SOR \ S
  • \砂\ S
  • \ d +

我加入了他们,所以模式是: “\ SOR \ S | \砂\ S | \ d + | \(| \)”

这显然可以找到任何值,但如果字符串中有额外的字符或字符串,则不会拒绝该字符串。

我不必使用正则表达式,但是当我了解它们时,这将是一些帮助的理想示例。 我一直在使用http://www.regexplanet.com/advanced/java/index.html测试不同的组合,但现在承认失败了。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

您可以将构造的正则表达式与matches()方法一起使用,只要您转义\ +并允许boolean happy = testString.matches("(\\sOR\\s|\\sAND\\s|\\d+|\\(|\\))+"); 运算符重复出现:

less than 10

我不确定\\d+的含义,但如果您的意思是该数字可以是0-9,则可以将\\b\\d\\b替换为\\b\\d{1,9}\\b。如果您的意思是允许1-9位数,则可以使用{{1}}。

答案 1 :(得分:0)

我会把你可接受的角色放在一个常数中。然后将String测试并将其转换为字符数组并逐个字符地查看它,看看它是否在您的常量中。如果没有爆炸。成功完成=良好的字符串。

我认为没有更短的路。