Concise Java Solution
\npublic String fractionAddition(String expression) {\n    String[] fracs = expression.split("(?=[-+])"); // splits input string into individual fractions\n    
```\npublic String fractionAddition(String expression) {\n    String[] fracs = expression.split("(?=[-+])"); // splits input string into individual fractions\n    String res = "0/1";\n    for (String frac : fracs) res = add(res, frac); // add all fractions together\n    return res;\n}\n\npublic String add(String frac1, String frac2) {\n    int[] f1 = Stream.of(frac1.split("/")).mapToInt(Integer::parseInt).toArray(), \n          f2 = Stream.of(frac2.split("/")).mapToInt(Integer::parseInt).toArray();\n    int numer = f1[0]*f2[1] + f1[1]*f2[0], denom = f1[1]*f2[1];\n    String sign = "";\n    if (numer < 0) {sign = "-"; numer *= -1;}\n    return sign + numer/gcd(numer, denom) + "/" + denom/gcd(numer, denom); // construct reduced fraction\n}\n\n// Computes gcd using Euclidean algorithm\npublic int gcd(int x, int y) { return x == 0 || y == 0 ? x + y : gcd(y, x % y); }\n```
[]