2016-08-22 68 views
3

我正在解決一個方程,但我想用常數來編程我的解決方案。我如何將這個表達式與正則表達式分開?

我正在處理的方法稱爲分解,將方程分解爲常量。問題是,當我分裂時,具有負常數的方程將產生具有常數絕對值的數組。如何在仍使用正則表達式的情況下實現減號?

如果輸入是ax+by=c,則輸出應爲{a,b,c}

有幫助的獎金:有沒有辦法刪除我分割時創建的空白元素。例如,如果I型方程2x+3y=6,我結束了包含該元素{2,,3,,6}一個「原始」陣列

代碼:

public static int[] decompose(String s) 
{ 
    s = s.replaceAll(" ", ""); 

    String[] termRaw = s.split("\\D"); //Splits the equation into constants *and* empty spaces. 
    ArrayList<Integer> constants = new ArrayList<Integer>(); //Values are placed into here if they are integers. 
    for(int k = 0 ; k < termRaw.length ; k++) 
    { 
     if(!(termRaw[k].equals(""))) 
     { 
      constants.add(Integer.parseInt(termRaw[k])); 
     } 

    } 
    int[] ans = new int[constants.size()]; 

    for(int k = 0 ; k < constants.size(); k++) //ArrayList to int[] 
    { 
     ans[k] = constants.get(k); 
    } 
    return ans; 
} 
+0

給定輸入'2x + 3y = 6',您的輸出是什麼? –

+0

具有值「{2,3,6}」的整數數組。一般來說「{a,b,c}」。 –

+1

如果輸入是'x + y = 5'會怎麼樣? – anubhava

回答

2

一般的策略此答案是分裂由操作者的輸入方程,然後在循環中提取出係數。不過,也有其需要考慮的幾個邊緣情況:

  • 一個加號(+)的前綴以每減不出現無論是作爲第一項
  • 分裂後,積極的係數由分割後看到空字符串
  • 檢測,負一的係數由看到一個減號


檢測
String input = "-22x-77y+z=-88-10+33z-q"; 
input = input.replaceAll(" ", "")    // remove whitespace 
      .replaceAll("=-", "-");   // remove equals sign 
      .replaceAll("(?<!^)-", "+-"); // replace - with +-, except at start of line 
// input = -22x+-77y+z+-88+-10+33z+- 

String[] termRaw = bozo.split("[\\+*/=]"); 
// termRaw contains [-22x, -77y, z, -88, -10, 33z, -] 

ArrayList<Integer> constants = new ArrayList<Integer>(); 
// after splitting, 
// termRaw contains [-22, -77, '', -88, -10, 33, '-'] 
for (int k=0 ; k < termRaw.length ; k++) { 
    termRaw[k] = termRaw[k].replaceAll("[a-zA-Z]", ""); 
    if (termRaw[k].equals("")) { 
     constants.add(1); 
    } 
    else if (termRaw[k].equals("-")) { 
     constants.add(-1); 
    } 
    else { 
     constants.add(Integer.parseInt(termRaw[k])); 
    } 
} 
+0

會有相同的答案。很好,upvoted。 – Shahid

+0

當我用你的代碼替換它時,它表示termRaw無法解析。我嘗試過初始化它,但沒有任何我知道的作品。 –

+0

@IanLimarta我有一個拼寫錯誤,使用's.split [「[\\ + \\ - */='」)'將運算符上的方程拆分。 –

1

如果您使用java8,那麼你可以使用這一行方法:

public static int[] decompose(String s) { 
    return Arrays.stream(s.replaceAll("[^0-9]", " ").split("\\s+")).mapToInt(Integer::parseInt).toArray(); 
} 

DEMO:

1.輸出

[2, 3, 6] 

2.代碼

import java.util.*; 

public class HelloWorld { 
    public static void main(String args[]) { 
     String s = "2x+3y=6"; 
     int[] array = decompose(s); 
     System.out.println(Arrays.toString(array)); 
    } 

    public static int[] decompose(String s) { 
     return Arrays.stream(s.replaceAll("[^0-9]", " ").split("\\s+")).mapToInt(Integer::parseInt).toArray(); 
    } 
} 
相關問題