【发布时间】:2012-02-04 11:55:44
【问题描述】:
我在 java 中有一个类似 a>5 and b<6 or c>=7 的字符串
当我检查字符串是否包含 > 时,> 和 >= 的输出都为真
我怎样才能将我的支票限制在特定的字符上?
如何使用matches函数?
【问题讨论】:
标签: java string substring contains
我在 java 中有一个类似 a>5 and b<6 or c>=7 的字符串
当我检查字符串是否包含 > 时,> 和 >= 的输出都为真
我怎样才能将我的支票限制在特定的字符上?
如何使用matches函数?
【问题讨论】:
标签: java string substring contains
您的错误是,您将词汇实体>= 视为“字符”。这将不止一次地咬你,因为实际上有两个字符,> 和=,而> 确实在这里。因此,根据您的需要,答案可能会有所不同。
您为什么不想看到>= 找到了?
您对> 的什么用法感兴趣?将例如<tag>some text</tag> 是您希望允许的正确字符串吗?
【讨论】:
a < 5 and s == "<br/>",那么> 是否算作您需要的查询?为了解决一个问题,你需要define一个问题。到目前为止,它根本没有定义。
您想区分大于和大于或等于。为什么不写一个返回操作符的方法呢?
enum Operator {
...
}
public Operator getOperator(String s) {
if(s.contains(">=")) {
return Operator.GREATER_THAN_OR_EQUAL_TO;
} else if (s.contains(">") {
return Operator.GREATER_THAN;
}
}
如果输入可以是包含多个运算符的复杂表达式,而不是 contains,请尝试使用 indexOf(...) 并向前看一个字符作为“=”。
【讨论】:
<tag>hi there!</tag> 上失败——也就是说,不会失败,但不会给出错误的“正确”答案:)
>= 和> 会发生什么,这意味着我们可以在不违反规范的情况下做任何事情。您必须先修复规范,然后再进行其他任何操作。
我只是根据更新后的规范把它放在一起。基本上是一个真正简单的解析器,相当机械地创建:(而且我早上 7 点不擅长命名哦)
public class Main {
public static void main(String[] args) {
String test = "a > b >= c > x";
Main m = new Main(test);
System.out.println(m.getTokenNumber());
test = "aasdfasdf asdfdasf";
m = new Main(test);
System.out.println(m.getTokenNumber());
}
private String input;
private int pos;
public Main(String input) {
this.input = input;
pos = 0;
}
public TokenNumber getTokenNumber() {
TokenNumber tokenNumber = new TokenNumber();
Token t = nextToken();
while (t != Token.NONE) {
tokenNumber.addToken(t);
t = nextToken();
}
return tokenNumber;
}
private Token nextToken() {
while (pos < input.length() && input.charAt(pos) != '>') pos++;
if (pos == input.length()) return Token.NONE;
pos++;
if (pos == input.length() || input.charAt(pos) != '=') return Token.GREATER;
return Token.GREATER_EQUAL;
}
enum Token {
GREATER, GREATER_EQUAL, NONE;
}
static class TokenNumber {
public int greater;
public int greater_than;
public void addToken(Token t) {
if (t == Token.GREATER) greater++;
else greater_than++;
assert t != Token.NONE;
}
public String toString() {
return String.format("Greater: %d%nGreater Than: %d", greater, greater_than);
}
}
}
【讨论】:
>。字符串由允许 string-literal 标记的语法规则处理。不幸的是,这将是一篇很好的文章来解释这个主题——或者一本书,所以试着从stackoverflow.com/questions/278480/antlr-tutorials开始——那里有很好的教程。
"your string >".contains(">");// returns true
【讨论】:
boolean value = Pattern.compile(">").matcher("a>5").find(); // returns true
【讨论】: