2012-01-06 66 views
1

我在Java中像a>5 and b<6 or c>=7字符串如何找到特定的字符在Java中

當我檢查字符串是否包含>然後輸出兩個>>=

我怎樣才能限制我的檢查只爲真特定字符?

如何使用matches函數?

回答

1

我剛剛根據更新的規格扔在一起。基本上一個真正簡單的解析器,而機械地產生:(而且我也不好,早上哦在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); 
     } 
    } 

} 
+0

太棒了。當然+1! – alf 2012-01-07 06:26:05

+0

這是非常棒的代碼,但假設我有@alf a> 5和s ==「
」建議的字符串,那麼你的代碼也正在計數br。但是我只需要計算一個> 5即唯一>符號,它真的表示>在條件而不是>符號用於關閉標記。 – SRK 2012-01-09 08:08:37

+1

@SRK解決方案將保持幾乎相同,您只需添加對額外令牌的支持。基本上,您需要爲您的代碼創建一個詞法分析器,一旦獲得了令牌流,您可以檢查是否存在'>'標記。字符串通過允許*字符串*標記的語法規則來滿足。不幸的是,這將是一篇很好的文章,解釋這個話題 - 或者一本書,所以試着從http://stackoverflow.com/questions/278480/antlr-tutorials開始 - 那裏有很好的教程。 – alf 2012-01-09 10:13:11

-1

boolean value = Pattern.compile(">").matcher("a>5").find(); // returns true

+2

您提供一個過於具體模式匹配是有用的。 – Karlson 2012-01-06 19:39:28

+0

它不工作,它仍然適用於>和> = – SRK 2012-01-07 04:49:41

0
"your string >".contains(">");// returns true 
+0

我試過相同的,但是如果我寫這個,那麼在≥=的情況下它也是真的...... – SRK 2012-01-07 04:50:42

2

你的錯誤是,你認爲一個詞法實體,>=的,作爲一個的 「人物」。這會咬你不止一次,因爲實際上有兩個字符,>=,並且>的確是在這裏。所以根據你的需要,答案可能會有所不同。

爲什麼你不想看到>=被發現?

>對您有什麼用處?例如, <tag>some text</tag>是你寧願讓一個正確的琴絃?

+0

+1準確地提出正確的問題。 – asgs 2012-01-06 19:29:43

+0

@alf我的興趣是我的輸入字符串將被查詢,並且我想區分包含>和> =的條件。 我知道> = contains>並且這就是爲什麼CONTAINS函數會給出真實值。 這樣我在問怎樣解決它...? – SRK 2012-01-07 04:53:37

+3

@SRK什麼是「查詢」是什麼意思?如果查詢恰好有一個'<5和s ==「
」',將是'>'算你需要與否的一個?爲了解決問題,你需要確定一個問題。到目前爲止,它沒有被定義。 – alf 2012-01-07 06:24:39

2

您想區分大於大於或等於。爲什麼不寫一個返回操作符的方法?

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(...)和向前看一個字符爲「=」。

+0

它仍然會失敗,'你好!' - 也就是說,沒有失敗,但不給,錯了,「正確」的答案:) – alf 2012-01-06 19:33:42

+0

是,他並沒有真正說了很多有關的數據。如果它是標籤數據,他會滿足於當前的實施。 – 2012-01-06 19:35:33

+0

@AmirAfghani如果S同時包含> =和> – SRK 2012-01-07 04:56:30

相關問題