我在Java中像a>5 and b<6 or c>=7
字符串如何找到特定的字符在Java中
當我檢查字符串是否包含>
然後輸出兩個>
和>=
我怎樣才能限制我的檢查只爲真特定字符?
如何使用matches
函數?
我在Java中像a>5 and b<6 or c>=7
字符串如何找到特定的字符在Java中
當我檢查字符串是否包含>
然後輸出兩個>
和>=
我怎樣才能限制我的檢查只爲真特定字符?
如何使用matches
函數?
我剛剛根據更新的規格扔在一起。基本上一個真正簡單的解析器,而機械地產生:(而且我也不好,早上哦在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);
}
}
}
"your string >".contains(">");// returns true
我試過相同的,但是如果我寫這個,那麼在≥=的情況下它也是真的...... – SRK 2012-01-07 04:50:42
你的錯誤是,你認爲一個詞法實體,>=
的,作爲一個的 「人物」。這會咬你不止一次,因爲實際上有兩個字符,>
和=
,並且>
的確是在這裏。所以根據你的需要,答案可能會有所不同。
爲什麼你不想看到>=
被發現?
>
對您有什麼用處?例如, <tag>some text</tag>
是你寧願讓一個正確的琴絃?
您想區分大於和大於或等於。爲什麼不寫一個返回操作符的方法?
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(...)
和向前看一個字符爲「=」。
太棒了。當然+1! – alf 2012-01-07 06:26:05
這是非常棒的代碼,但假設我有@alf a> 5和s ==「
」建議的字符串,那麼你的代碼也正在計數br。但是我只需要計算一個> 5即唯一>符號,它真的表示>在條件而不是>符號用於關閉標記。 – SRK 2012-01-09 08:08:37
@SRK解決方案將保持幾乎相同,您只需添加對額外令牌的支持。基本上,您需要爲您的代碼創建一個詞法分析器,一旦獲得了令牌流,您可以檢查是否存在'>'標記。字符串通過允許*字符串*標記的語法規則來滿足。不幸的是,這將是一篇很好的文章,解釋這個話題 - 或者一本書,所以試着從http://stackoverflow.com/questions/278480/antlr-tutorials開始 - 那裏有很好的教程。 – alf 2012-01-09 10:13:11