2013-05-28 65 views
-1

我正在實現我自己的腳本語言作爲一個側面項目,並在語言變量由$ [變量名稱]訪問。然而,當我使用與string.replace()來代替(例如)與MYVAR價值$ MYVAR(如 '我的變量')與此代碼:Java - 意外的行爲從String.replace()

public static void main(String[] args) 
{ 
    System.out.println(replaceVars("$myvar")); 
} 

public static String replaceVars(String source) 
{ 
    String[][] varNames = new String[][]{new String[]{"myvar", "This is a variable"}, new String[]{"anothervar", "This is another variable"}, new String[]{"yetanothervar", "This is yet another variable"}}; 
    String result = source; 
    for(String[] s : varNames) result = result.replace("$" + s[0], s[1]); 
    return result; 
} 

輸出:$ MYVAR

什麼正在進行?

+3

對我的作品......輸出是'這是一個variable' – DannyMo

+4

您應該使用地圖來保存你的VARNAME /條值對 – Bohemian

+1

原來的問題了'static'失蹤在'replaceVars'方法上。 – rgettman

回答

8

(原始)給定的代碼不會編譯:

Main.java:7: non-static method replaceVars(java.lang.String) cannot be referenced from a static context 
    System.out.println(replaceVars("$myvar")); 
        ^

...除非replaceVars聲明static。然後它按預期工作。

+0

啊,對不起,編輯。 – condorcraft110

+0

'replace'只需要一個'char',所以不知道它是如何工作的http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replace%28char,%20char %29 – 2013-05-28 20:28:10

+2

@ 0A0D替換可以採用CharSequences:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replace%28java.lang.CharSequence,%20java.lang.CharSequence %29 –

-1

沒關係。它正在做你寫的東西。

  1. result == "$myvar"
  2. "$myvar""This is a variable"
  3. 符號$替換是在result不再存在,所以沒有替換此外發生。

P.S.我只是想知道另一位評論員是否真的意識到發生了什麼?沒有特殊的字符或其他的東西,只需要通過算法在你的頭。在發佈之前想想。

Prooflink

This code works

0

正如一些評論說:對我的作品。

然而,你沒有要求的是對你的副項目的實施建議。嘗試處理「$ myVar $ myVars $ myVarIsALongVariableName」 - 你可能寧願想做正確的事情,並做適當的標記等。

恕我直言,這是,在另一個層面上,意想不到的行爲。使用其他答案解決根本問題。另外,仔細檢查你是否正在運行這個類,並且它是正確編譯的,例如通過對主要的代碼更改爲

System.out.println(replaceVars("edited: $myvar"));