2011-06-03 89 views
0

字符串我需要關於如何在Java中 分裂與算術運算符和函數的字符串的例子字符串一些指導:分裂與算術運算符和函數的Java

"string1"+"String2" >= 10 * function1()/function2() 

運營商可能是:

+ - */**/%/() = != > < <= >= 

拆分 後,我需要像輸出:

array[0]=string1 
array[1]=string2 
array[2]=10 

我只需要雙引號和內容或數字中的東西,而不是函數(function1())或運算符。

我需要這個問題的正則表達式

+0

儘管可能用正則表達式來實現這一點 - 爲什麼不看JLex這樣的東西來構建一個詞法分析器? – Liv 2011-06-03 11:41:19

回答

1

如果你需要雙引號和數字裏提取的東西正則表達式,那麼你可以使用這個java代碼:

public static void main(String[] args) { 
    Pattern p = Pattern.compile("\"(\\w+)\"|\\b\\d+\\b"); 
    Matcher m = p.matcher(
     "\"string1\"+\"String2\" >= 10 * function1()/function2()"); 
    List<String> parts = new ArrayList<String>(); 
    while (m.find()) { 
     if (m.group(1) != null) 
      parts.add(m.group(1)); 
     else 
      parts.add(m.group(0)); 
    } 
    System.out.println(Arrays.toString(parts.toArray(new String[] {})));   
} 

,輸出:

[string1, String2, 10] 

注:我不是確定regex是這種情況下最好的工具。正如其他人所建議的,您可能需要調查解析器的使用。

+0

感謝您的代碼,我需要輸出像string1,string2,10沒有雙引號。你能爲此嗎? – Selva 2011-06-06 03:18:59

+0

@ user782482:我修改了我的代碼以解決您的請求。我希望這有幫助。 – MarcoS 2011-06-06 06:20:21

+0

是的,它工作正常。還有更多的幫助,如果我想在該數組中的函數意味着我應該怎麼做?例如[string1,string2,10,function1(),function2()] – Selva 2011-06-06 07:43:15

2

我推薦創建一個解析器,使用的JavaCC也許蒸穀米 https://github.com/sirthias/parboiled/wiki/(沒有嘗試過一個尚未)

+0

我喜歡JavaCC的想法,雖然它可能太重,因爲沒有語法涉及,所以只需一個詞法分析器即可。 +1然而;) – Liv 2011-06-03 11:43:25

3

您可以從字符串中刪除所有的運營商,然後匹配除了跟到底()串應有盡有。

+1

刪除操作符時,使用特殊字符,然後使用特殊字符分割字符串。 – Rasika 2011-06-03 11:44:54